var DWZ = {
	keyCode: {
		ENTER: 13, ESC: 27, END: 35, HOME: 36,
		SHIFT: 16, TAB: 9,
		LEFT: 37, RIGHT: 39, UP: 38, DOWN: 40,
		DELETE: 46, BACKSPACE: 8},
	eventType: {
		pageClear: "pageClear",
		resizeGrid: "resizeGrid"},
	isOverAxis: function (x, reference, size) {
		return(x > reference) && (x < (reference + size));
	},
	isOver: function (y, x, top, left, height, width) {
		return this.isOverAxis(y, top, height) && this.isOverAxis(x, left, width);
	},
	pageInfo: {pageNum: "pageNum", numPerPage: "numPerPage", orderField: "orderField", orderDirection: "orderDirection"},
	statusCode: {ok: 200, error: 300, timeout: 301},
	ui: {sbar: true},
	frag: {},
	_msg: {},
	_set: {
		loginUrl: "",
		loginTitle: "",
		debug: false},
	msg: function (key, args) {
		var _format = function (str, args) {
			args = args || [];
			var result = str || "";
			for (var i = 0; i < args.length; i++) {
				result = result.replace(new RegExp("\\{" + i + "\\}", "g"), args[i]);
			}
			return result;
		}
		return _format(this._msg[key], args);
	},
	debug: function (msg) {
		if (this._set.debug) {
			if (typeof(console) != "undefined")console.log(msg);
			else alert(msg);
		}
	},
	loadLogin: function () {
		if ($.pdialog && DWZ._set.loginTitle) {
			$.pdialog.open(DWZ._set.loginUrl, "login", DWZ._set.loginTitle, {mask: true, width: 520, height: 260});
		} else {
			window.location = DWZ._set.loginUrl;
		}
	},
	obj2str: function (o) {
		var r = [];
		if (typeof o == "string")return "\"" + o.replace(/([\'\"\\])/g, "\\$1").replace(/(\n)/g, "\\n").replace(/(\r)/g, "\\r").replace(/(\t)/g, "\\t") + "\"";
		if (typeof o == "object") {
			if (!o.sort) {
				for (var i in o)
					r.push(i + ":" + DWZ.obj2str(o[i]));
				if (!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)) {
					r.push("toString:" + o.toString.toString());
				}
				r = "{" + r.join() + "}"
			} else {
				for (var i = 0; i < o.length; i++) {
					r.push(DWZ.obj2str(o[i]));
				}
				r = "[" + r.join() + "]"
			}
			return r;
		}
		return o.toString();
	},
	jsonEval: function (data) {
		try {
			if ($.type(data) == 'string')
				return eval('(' + data + ')');
			else return data;
		} catch (e) {
			return{};
		}
	},
	ajaxError: function (xhr, ajaxOptions, thrownError) {
		if (alertMsg) {
			alertMsg.error("<div>Http status: " + xhr.status + " " + xhr.statusText + "</div>" + "<div>ajaxOptions: " + ajaxOptions + "</div>" + "<div>thrownError: " + thrownError + "</div>" + "<div>" + xhr.responseText + "</div>");
		} else {
			alert("Http status: " + xhr.status + " " + xhr.statusText + "\najaxOptions: " + ajaxOptions + "\nthrownError:" + thrownError + "\n" + xhr.responseText);
		}
	},
	ajaxDone: function (json) {
		if (json.statusCode == DWZ.statusCode.error) {
			if (json.message && alertMsg)alertMsg.error(json.message);
		} else if (json.statusCode == DWZ.statusCode.timeout) {
			if (alertMsg)alertMsg.error(json.message || DWZ.msg("sessionTimout"), {okCall: DWZ.loadLogin});
			else DWZ.loadLogin();
		} else {
			if (json.message && alertMsg)alertMsg.correct(json.message);
		}
		;
	},
	init: function (pageFrag, options) {
		var op = $.extend({
			loginUrl: "login.html", loginTitle: null, callback: null, debug: false,
			statusCode: {}}, options);
		this._set.loginUrl = op.loginUrl;
		this._set.loginTitle = op.loginTitle;
		this._set.debug = op.debug;
		$.extend(DWZ.statusCode, op.statusCode);
		$.extend(DWZ.pageInfo, op.pageInfo);
		jQuery.ajax({
			type: 'GET',
			url: pageFrag,
			dataType: 'xml',
			timeout: 50000,
			cache: false,
			error: function (xhr) {
				alert('Error loading XML document: ' + pageFrag + "\nHttp status: " + xhr.status + " " + xhr.statusText);
			},
			success: function (xml) {
				$(xml).find("_PAGE_").each(function () {
					var pageId = $(this).attr("id");
					if (pageId)DWZ.frag[pageId] = $(this).text();
				});
				$(xml).find("_MSG_").each(function () {
					var id = $(this).attr("id");
					if (id)DWZ._msg[id] = $(this).text();
				});
				if (jQuery.isFunction(op.callback))op.callback();
			}});
		var _doc = $(document);
		if (!_doc.isBind(DWZ.eventType.pageClear)) {
			_doc.bind(DWZ.eventType.pageClear, function (event) {
				var box = event.target;
				if ($.fn.xheditor) {
					$("textarea.editor", box).xheditor(false);
				}
			});
		}
	}};
(function ($) {
	$.setRegional = function (key, value) {
		if (!$.regional)$.regional = {};
		$.regional[key] = value;
	};
	$.fn.extend({
		ajaxUrl: function (op) {
			var $this = $(this);
			$this.trigger(DWZ.eventType.pageClear);
			$.ajax({
				type: op.type || 'GET',
				url: op.url,
				data: op.data,
				cache: false,
				success: function (response) {
					var json = DWZ.jsonEval(response);
					if (json.statusCode == DWZ.statusCode.error) {
						if (json.message)alertMsg.error(json.message);
					} else {
						$this.html(response).initUI();
						if ($.isFunction(op.callback))op.callback(response);
					}
					if (json.statusCode == DWZ.statusCode.timeout) {
						if ($.pdialog)$.pdialog.checkTimeout();
						if (navTab)navTab.checkTimeout();
						alertMsg.error(json.message || DWZ.msg("sessionTimout"), {okCall: function () {
							DWZ.loadLogin();
						}});
					}
				},
				error: DWZ.ajaxError,
				statusCode: {
					503: function (xhr, ajaxOptions, thrownError) {
						alert(DWZ.msg("statusCode_503") || thrownError);
					}}});
		},
		loadUrl: function (url, data, callback) {
			$(this).ajaxUrl({url: url, data: data, callback: callback});
		},
		initUI: function () {
			return this.each(function () {
				if ($.isFunction(initUI))initUI(this);
			});
		},
		layoutH: function ($refBox) {
			return this.each(function () {
				var $this = $(this);
				if (!$refBox)$refBox = $this.parents("div.layoutBox:first");
				var iRefH = $refBox.height();
				var iLayoutH = parseInt($this.attr("layoutH"));
				var iH = iRefH - iLayoutH > 50 ? iRefH - iLayoutH : 50;
				if ($this.isTag("table")) {
					$this.removeAttr("layoutH").wrap('<div layoutH="' + iLayoutH + '" style="overflow:auto;height:' + iH + 'px"></div>');
				} else {
					$this.height(iH).css("overflow", "auto");
				}
			});
		},
		hoverClass: function (className, speed) {
			var _className = className || "hover";
			return this.each(function () {
				var $this = $(this), mouseOutTimer;
				$this.hover(function () {
					if (mouseOutTimer)clearTimeout(mouseOutTimer);
					$this.addClass(_className);
				}, function () {
					mouseOutTimer = setTimeout(function () {
						$this.removeClass(_className);
					}, speed || 10);
				});
			});
		},
		focusClass: function (className) {
			var _className = className || "textInputFocus";
			return this.each(function () {
				$(this).focus(function () {
					$(this).addClass(_className);
				}).blur(function () {
						$(this).removeClass(_className);
					});
			});
		},
		inputAlert: function () {
			return this.each(function () {
				var $this = $(this);

				function getAltBox() {
					return $this.parent().find("label.alt");
				}

				function altBoxCss(opacity) {
					var position = $this.position();
					return{
						width: $this.width(),
						top: position.top + 'px',
						left: position.left + 'px',
						opacity: opacity || 1};
				}

				if (getAltBox().size() < 1) {
					if (!$this.attr("id"))$this.attr("id", $this.attr("name") + "_" + Math.round(Math.random() * 10000));
					var $label = $('<label class="alt" for="' + $this.attr("id") + '">' + $this.attr("alt") + '</label>').appendTo($this.parent());
					$label.css(altBoxCss(1));
					if ($this.val())$label.hide();
				}
				$this.focus(function () {
					getAltBox().css(altBoxCss(0.3));
				}).blur(function () {
						if (!$(this).val())getAltBox().show().css("opacity", 1);
					}).keydown(function () {
						getAltBox().hide();
					});
			});
		},
		isTag: function (tn) {
			if (!tn)return false;
			return $(this)[0].tagName.toLowerCase() == tn ? true : false;
		},
		isBind: function (type) {
			var _events = $(this).data("events");
			return _events && type && _events[type];
		},
		log: function (msg) {
			return this.each(function () {
				if (console)console.log("%s: %o", msg, this);
			});
		}});
	$.extend(String.prototype, {
		isPositiveInteger: function () {
			return(new RegExp(/^[1-9]\d*$/).test(this));
		},
		isInteger: function () {
			return(new RegExp(/^\d+$/).test(this));
		},
		isNumber: function (value, element) {
			return(new RegExp(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/).test(this));
		},
		trim: function () {
			return this.replace(/(^\s*)|(\s*$)|\r|\n/g, "");
		},
		startsWith: function (pattern) {
			return this.indexOf(pattern) === 0;
		},
		endsWith: function (pattern) {
			var d = this.length - pattern.length;
			return d >= 0 && this.lastIndexOf(pattern) === d;
		},
		replaceSuffix: function (index) {
			return this.replace(/\[[0-9]+\]/, '[' + index + ']').replace('#index#', index);
		},
		trans: function () {
			return this.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"');
		},
		encodeTXT: function () {
			return(this).replaceAll('&', '&amp;').replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll(" ", "&nbsp;");
		},
		replaceAll: function (os, ns) {
			return this.replace(new RegExp(os, "gm"), ns);
		},
		replaceTm: function ($data) {
			if (!$data)return this;
			return this.replace(RegExp("({[A-Za-z_]+[A-Za-z0-9_]*})", "g"), function ($1) {
				return $data[$1.replace(/[{}]+/g, "")];
			});
		},
		replaceTmById: function (_box) {
			var $parent = _box || $(document);
			return this.replace(RegExp("({[A-Za-z_]+[A-Za-z0-9_]*})", "g"), function ($1) {
				var $input = $parent.find("#" + $1.replace(/[{}]+/g, ""));
				return $input.val() ? $input.val() : $1;
			});
		},
		isFinishedTm: function () {
			return !(new RegExp("{[A-Za-z_]+[A-Za-z0-9_]*}").test(this));
		},
		skipChar: function (ch) {
			if (!this || this.length === 0) {
				return '';
			}
			if (this.charAt(0) === ch) {
				return this.substring(1).skipChar(ch);
			}
			return this;
		},
		isValidPwd: function () {
			return(new RegExp(/^([_]|[a-zA-Z0-9]){6,32}$/).test(this));
		},
		isValidMail: function () {
			return(new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/).test(this.trim()));
		},
		isSpaces: function () {
			for (var i = 0; i < this.length; i += 1) {
				var ch = this.charAt(i);
				if (ch != ' ' && ch != "\n" && ch != "\t" && ch != "\r") {
					return false;
				}
			}
			return true;
		},
		isPhone: function () {
			return(new RegExp(/(^([0-9]{3,4}[-])?\d{3,8}(-\d{1,6})?$)|(^\([0-9]{3,4}\)\d{3,8}(\(\d{1,6}\))?$)|(^\d{3,8}$)/).test(this));
		},
		isUrl: function () {
			return(new RegExp(/^[a-zA-z]+:\/\/([a-zA-Z0-9\-\.]+)([-\w .\/?%&=:]*)$/).test(this));
		},
		isExternalUrl: function () {
			return this.isUrl() && this.indexOf("://" + document.domain) == -1;
		}});
})(jQuery);
function Map() {
	this.elements = new Array();
	this.size = function () {
		return this.elements.length;
	}
	this.isEmpty = function () {
		return(this.elements.length < 1);
	}
	this.clear = function () {
		this.elements = new Array();
	}
	this.put = function (_key, _value) {
		this.remove(_key);
		this.elements.push({key: _key, value: _value});
	}
	this.remove = function (_key) {
		try {
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].key == _key) {
					this.elements.splice(i, 1);
					return true;
				}
			}
		} catch (e) {
			return false;
		}
		return false;
	}
	this.get = function (_key) {
		try {
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].key == _key) {
					return this.elements[i].value;
				}
			}
		} catch (e) {
			return null;
		}
	}
	this.element = function (_index) {
		if (_index < 0 || _index >= this.elements.length) {
			return null;
		}
		return this.elements[_index];
	}
	this.containsKey = function (_key) {
		try {
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].key == _key) {
					return true;
				}
			}
		} catch (e) {
			return false;
		}
		return false;
	}
	this.values = function () {
		var arr = new Array();
		for (i = 0; i < this.elements.length; i++) {
			arr.push(this.elements[i].value);
		}
		return arr;
	}
	this.keys = function () {
		var arr = new Array();
		for (i = 0; i < this.elements.length; i++) {
			arr.push(this.elements[i].key);
		}
		return arr;
	}
}
(function () {
	var MONTH_NAMES = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
	var DAY_NAMES = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');

	function LZ(x) {
		return(x < 0 || x > 9 ? "" : "0") + x
	}

	function formatDate(date, format) {
		format = format + "";
		var result = "";
		var i_format = 0;
		var c = "";
		var token = "";
		var y = date.getYear() + "";
		var M = date.getMonth() + 1;
		var d = date.getDate();
		var E = date.getDay();
		var H = date.getHours();
		var m = date.getMinutes();
		var s = date.getSeconds();
		var yyyy, yy, MMM, MM, dd, hh, h, mm, ss, ampm, HH, H, KK, K, kk, k;
		var value = {};
		if (y.length < 4) {
			y = "" + (y - 0 + 1900);
		}
		value["y"] = "" + y;
		value["yyyy"] = y;
		value["yy"] = y.substring(2, 4);
		value["M"] = M;
		value["MM"] = LZ(M);
		value["MMM"] = MONTH_NAMES[M - 1];
		value["NNN"] = MONTH_NAMES[M + 11];
		value["d"] = d;
		value["dd"] = LZ(d);
		value["E"] = DAY_NAMES[E + 7];
		value["EE"] = DAY_NAMES[E];
		value["H"] = H;
		value["HH"] = LZ(H);
		if (H == 0) {
			value["h"] = 12;
		}
		else if (H > 12) {
			value["h"] = H - 12;
		}
		else {
			value["h"] = H;
		}
		value["hh"] = LZ(value["h"]);
		if (H > 11) {
			value["K"] = H - 12;
		} else {
			value["K"] = H;
		}
		value["k"] = H + 1;
		value["KK"] = LZ(value["K"]);
		value["kk"] = LZ(value["k"]);
		if (H > 11) {
			value["a"] = "PM";
		}
		else {
			value["a"] = "AM";
		}
		value["m"] = m;
		value["mm"] = LZ(m);
		value["s"] = s;
		value["ss"] = LZ(s);
		while (i_format < format.length) {
			c = format.charAt(i_format);
			token = "";
			while ((format.charAt(i_format) == c) && (i_format < format.length)) {
				token += format.charAt(i_format++);
			}
			if (value[token] != null) {
				result += value[token];
			}
			else {
				result += token;
			}
		}
		return result;
	}

	function _isInteger(val) {
		return(new RegExp(/^\d+$/).test(val));
	}

	function _getInt(str, i, minlength, maxlength) {
		for (var x = maxlength; x >= minlength; x--) {
			var token = str.substring(i, i + x);
			if (token.length < minlength) {
				return null;
			}
			if (_isInteger(token)) {
				return token;
			}
		}
		return null;
	}

	function parseDate(val, format) {
		val = val + "";
		format = format + "";
		var i_val = 0;
		var i_format = 0;
		var c = "";
		var token = "";
		var token2 = "";
		var x, y;
		var now = new Date(1900, 0, 1);
		var year = now.getYear();
		var month = now.getMonth() + 1;
		var date = 1;
		var hh = now.getHours();
		var mm = now.getMinutes();
		var ss = now.getSeconds();
		var ampm = "";
		while (i_format < format.length) {
			c = format.charAt(i_format);
			token = "";
			while ((format.charAt(i_format) == c) && (i_format < format.length)) {
				token += format.charAt(i_format++);
			}
			if (token == "yyyy" || token == "yy" || token == "y") {
				if (token == "yyyy") {
					x = 4;
					y = 4;
				}
				if (token == "yy") {
					x = 2;
					y = 2;
				}
				if (token == "y") {
					x = 2;
					y = 4;
				}
				year = _getInt(val, i_val, x, y);
				if (year == null) {
					return 0;
				}
				i_val += year.length;
				if (year.length == 2) {
					if (year > 70) {
						year = 1900 + (year - 0);
					}
					else {
						year = 2000 + (year - 0);
					}
				}
			} else if (token == "MMM" || token == "NNN") {
				month = 0;
				for (var i = 0; i < MONTH_NAMES.length; i++) {
					var month_name = MONTH_NAMES[i];
					if (val.substring(i_val, i_val + month_name.length).toLowerCase() == month_name.toLowerCase()) {
						if (token == "MMM" || (token == "NNN" && i > 11)) {
							month = i + 1;
							if (month > 12) {
								month -= 12;
							}
							i_val += month_name.length;
							break;
						}
					}
				}
				if ((month < 1) || (month > 12)) {
					return 0;
				}
			} else if (token == "EE" || token == "E") {
				for (var i = 0; i < DAY_NAMES.length; i++) {
					var day_name = DAY_NAMES[i];
					if (val.substring(i_val, i_val + day_name.length).toLowerCase() == day_name.toLowerCase()) {
						i_val += day_name.length;
						break;
					}
				}
			} else if (token == "MM" || token == "M") {
				month = _getInt(val, i_val, token.length, 2);
				if (month == null || (month < 1) || (month > 12)) {
					return 0;
				}
				i_val += month.length;
			} else if (token == "dd" || token == "d") {
				date = _getInt(val, i_val, token.length, 2);
				if (date == null || (date < 1) || (date > 31)) {
					return 0;
				}
				i_val += date.length;
			} else if (token == "hh" || token == "h") {
				hh = _getInt(val, i_val, token.length, 2);
				if (hh == null || (hh < 1) || (hh > 12)) {
					return 0;
				}
				i_val += hh.length;
			} else if (token == "HH" || token == "H") {
				hh = _getInt(val, i_val, token.length, 2);
				if (hh == null || (hh < 0) || (hh > 23)) {
					return 0;
				}
				i_val += hh.length;
			}
			else if (token == "KK" || token == "K") {
				hh = _getInt(val, i_val, token.length, 2);
				if (hh == null || (hh < 0) || (hh > 11)) {
					return 0;
				}
				i_val += hh.length;
			} else if (token == "kk" || token == "k") {
				hh = _getInt(val, i_val, token.length, 2);
				if (hh == null || (hh < 1) || (hh > 24)) {
					return 0;
				}
				i_val += hh.length;
				hh--;
			} else if (token == "mm" || token == "m") {
				mm = _getInt(val, i_val, token.length, 2);
				if (mm == null || (mm < 0) || (mm > 59)) {
					return 0;
				}
				i_val += mm.length;
			} else if (token == "ss" || token == "s") {
				ss = _getInt(val, i_val, token.length, 2);
				if (ss == null || (ss < 0) || (ss > 59)) {
					return 0;
				}
				i_val += ss.length;
			} else if (token == "a") {
				if (val.substring(i_val, i_val + 2).toLowerCase() == "am") {
					ampm = "AM";
				}
				else if (val.substring(i_val, i_val + 2).toLowerCase() == "pm") {
					ampm = "PM";
				}
				else {
					return 0;
				}
				i_val += 2;
			} else {
				if (val.substring(i_val, i_val + token.length) != token) {
					return 0;
				}
				else {
					i_val += token.length;
				}
			}
		}
		if (i_val != val.length) {
			return 0;
		}
		if (month == 2) {
			if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
				if (date > 29) {
					return 0;
				}
			} else {
				if (date > 28) {
					return 0;
				}
			}
		}
		if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
			if (date > 30) {
				return 0;
			}
		}
		if (hh < 12 && ampm == "PM") {
			hh = hh - 0 + 12;
		}
		else if (hh > 11 && ampm == "AM") {
			hh -= 12;
		}
		return new Date(year, month - 1, date, hh, mm, ss);
	}

	Date.prototype.formatDate = function (dateFmt) {
		return formatDate(this, dateFmt);
	};
	String.prototype.parseDate = function (dateFmt) {
		if (this.length < dateFmt.length) {
			dateFmt = dateFmt.slice(0, this.length);
		}
		return parseDate(this, dateFmt);
	};
	function replaceTmEval(data) {
		return data.replace(RegExp("({[A-Za-z0-9_+-]*})", "g"), function ($1) {
			return eval('(' + $1.replace(/[{}]+/g, "") + ')');
		});
	}

	Date.prototype.formatDateTm = function (dateFmt) {
		var y = this.getFullYear();
		var m = this.getMonth() + 1;
		var d = this.getDate();
		var sDate = dateFmt.replaceAll("%y", y).replaceAll("%M", m).replaceAll("%d", d);
		sDate = replaceTmEval(sDate);
		var _y = 1900, _m = 0, _d = 1;
		var aDate = sDate.split('-');
		if (aDate.length > 0)_y = aDate[0];
		if (aDate.length > 1)_m = aDate[1] - 1;
		if (aDate.length > 2)_d = aDate[2];
		return new Date(_y, _m, _d).formatDate('yyyy-MM-dd');
	};
})();
(function ($) {
	if ($.validator) {
		$.validator.addMethod("alphanumeric", function (value, element) {
			return this.optional(element) || /^\w+$/i.test(value);
		}, "Letters, numbers or underscores only please");
		$.validator.addMethod("lettersonly", function (value, element) {
			return this.optional(element) || /^[a-z]+$/i.test(value);
		}, "Letters only please");
		$.validator.addMethod("phone", function (value, element) {
			return this.optional(element) || /^[0-9 \(\)]{7,30}$/.test(value);
		}, "Please specify a valid phone number");
		$.validator.addMethod("postcode", function (value, element) {
			return this.optional(element) || /^[0-9 A-Za-z]{5,20}$/.test(value);
		}, "Please specify a valid postcode");
		$.validator.addMethod("date", function (value, element) {
			value = value.replace(/\s+/g, "");
			if (String.prototype.parseDate) {
				var $input = $(element);
				var pattern = $input.attr('dateFmt') || 'yyyy-MM-dd';
				return !$input.val() || $input.val().parseDate(pattern);
			} else {
				return this.optional(element) || value.match(/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/);
			}
		}, "Please enter a valid date.");
		$.validator.addMethod("customvalid", function (value, element, params) {
			try {
				return eval('(' + params + ')');
			} catch (e) {
				return false;
			}
		}, "Please fix this field.");
		$.validator.addClassRules({
			date: {date: true},
			alphanumeric: {alphanumeric: true},
			lettersonly: {lettersonly: true},
			phone: {phone: true},
			postcode: {postcode: true}});
		$.validator.setDefaults({errorElement: "span"});
		$.validator.autoCreateRanges = true;
	}
})(jQuery);
(function ($) {
	$.fn.cssv = function (pre) {
		var cssPre = $(this).css(pre);
		return cssPre.substring(0, cssPre.indexOf("px")) * 1;
	};
	$.fn.jBar = function (options) {
		var op = $.extend({container: "#container", collapse: ".collapse", toggleBut: ".toggleCollapse div", sideBar: "#sidebar", sideBar2: "#sidebar_s", splitBar: "#splitBar", splitBar2: "#splitBarProxy"}, options);
		return this.each(function () {
			var jbar = this;
			var sbar = $(op.sideBar2, jbar);
			var bar = $(op.sideBar, jbar);
			$(op.toggleBut, bar).click(function () {
				DWZ.ui.sbar = false;
				$(op.splitBar).hide();
				var sbarwidth = sbar.cssv("left") + sbar.outerWidth();
				var barleft = sbarwidth - bar.outerWidth();
				var cleft = $(op.container).cssv("left") - (bar.outerWidth() - sbar.outerWidth());
				var cwidth = bar.outerWidth() - sbar.outerWidth() + $(op.container).outerWidth();
				$(op.container).animate({left: cleft, width: cwidth}, 50, function () {
					bar.animate({left: barleft}, 500, function () {
						bar.hide();
						sbar.show().css("left", -50).animate({left: 5}, 200);
						$(window).trigger(DWZ.eventType.resizeGrid);
					});
				});
				$(op.collapse, sbar).click(function () {
					var sbarwidth = sbar.cssv("left") + sbar.outerWidth();
					if (bar.is(":hidden")) {
						$(op.toggleBut, bar).hide();
						bar.show().animate({left: sbarwidth}, 500);
						$(op.container).click(_hideBar);
					} else {
						bar.animate({left: barleft}, 500, function () {
							bar.hide();
						});
					}
					function _hideBar() {
						$(op.container).unbind("click", _hideBar);
						if (!DWZ.ui.sbar) {
							bar.animate({left: barleft}, 500, function () {
								bar.hide();
							});
						}
					}

					return false;
				});
				return false;
			});
			$(op.toggleBut, sbar).click(function () {
				DWZ.ui.sbar = true;
				sbar.animate({left: -25}, 200, function () {
					bar.show();
				});
				bar.animate({left: 5}, 800, function () {
					$(op.splitBar).show();
					$(op.toggleBut, bar).show();
					var cleft = 5 + bar.outerWidth() + $(op.splitBar).outerWidth();
					var cwidth = $(op.container).outerWidth() - (cleft - $(op.container).cssv("left"));
					$(op.container).css({left: cleft, width: cwidth});
					$(op.collapse, sbar).unbind('click');
					$(window).trigger(DWZ.eventType.resizeGrid);
				});
				return false;
			});
			$(op.splitBar).mousedown(function (event) {
				$(op.splitBar2).each(function () {
					var spbar2 = $(this);
					setTimeout(function () {
						spbar2.show();
					}, 100);
					spbar2.css({visibility: "visible", left: $(op.splitBar).css("left")});
					spbar2.jDrag($.extend(options, {obj: $("#sidebar"), move: "horizontal", event: event, stop: function () {
						$(this).css("visibility", "hidden");
						var move = $(this).cssv("left") - $(op.splitBar).cssv("left");
						var sbarwidth = bar.outerWidth() + move;
						var cleft = $(op.container).cssv("left") + move;
						var cwidth = $(op.container).outerWidth() - move;
						bar.css("width", sbarwidth);
						$(op.splitBar).css("left", $(this).css("left"));
						$(op.container).css({left: cleft, width: cwidth});
					}}));
					return false;
				});
			});
		});
	}
})(jQuery);
(function ($) {
	$.fn.jDrag = function (options) {
		if (typeof options == 'string') {
			if (options == 'destroy')
				return this.each(function () {
					$(this).unbind('mousedown', $.rwdrag.start);
					$.data(this, 'pp-rwdrag', null);
				});
		}
		return this.each(function () {
			var el = $(this);
			$.data($.rwdrag, 'pp-rwdrag', {
				options: $.extend({
					el: el,
					obj: el}, options)});
			if (options.event)
				$.rwdrag.start(options.event);
			else {
				var select = options.selector;
				$(select, obj).bind('mousedown', $.rwdrag.start);
			}
		});
	};
	$.rwdrag = {
		start: function (e) {
			document.onselectstart = function (e) {
				return false
			};
			var data = $.data(this, 'pp-rwdrag');
			var el = data.options.el[0];
			$.data(el, 'pp-rwdrag', {
				options: data.options});
			if (!$.rwdrag.current) {
				$.rwdrag.current = {
					el: el,
					oleft: parseInt(el.style.left) || 0,
					otop: parseInt(el.style.top) || 0,
					ox: e.pageX || e.screenX,
					oy: e.pageY || e.screenY};
				$(document).bind("mouseup", $.rwdrag.stop).bind("mousemove", $.rwdrag.drag);
			}
		},
		drag: function (e) {
			if (!e)var e = window.event;
			var current = $.rwdrag.current;
			var data = $.data(current.el, 'pp-rwdrag');
			var left = (current.oleft + (e.pageX || e.clientX) - current.ox);
			var top = (current.otop + (e.pageY || e.clientY) - current.oy);
			if (top < 1)top = 0;
			if (data.options.move == 'horizontal') {
				if ((data.options.minW && left >= $(data.options.obj).cssv("left") + data.options.minW) && (data.options.maxW && left <= $(data.options.obj).cssv("left") + data.options.maxW))
					current.el.style.left = left + 'px';
				else if (data.options.scop) {
					if (data.options.relObj) {
						if ((left - parseInt(data.options.relObj.style.left)) > data.options.cellMinW) {
							current.el.style.left = left + 'px';
						}
					} else
						current.el.style.left = left + 'px';
				}
			} else if (data.options.move == 'vertical') {
				current.el.style.top = top + 'px';
			} else {
				var selector = data.options.selector ? $(data.options.selector, data.options.obj) : $(data.options.obj);
				if (left >= -selector.outerWidth() * 2 / 3 && top >= 0 && (left + selector.outerWidth() / 3 < $(window).width()) && (top + selector.outerHeight() < $(window).height())) {
					current.el.style.left = left + 'px';
					current.el.style.top = top + 'px';
				}
			}
			if (data.options.drag) {
				data.options.drag.apply(current.el, [current.el]);
			}
			return $.rwdrag.preventEvent(e);
		},
		stop: function (e) {
			var current = $.rwdrag.current;
			var data = $.data(current.el, 'pp-rwdrag');
			$(document).unbind('mousemove', $.rwdrag.drag).unbind('mouseup', $.rwdrag.stop);
			if (data.options.stop) {
				data.options.stop.apply(current.el, [current.el]);
			}
			$.rwdrag.current = null;
			document.onselectstart = function (e) {
				return true
			};
			return $.rwdrag.preventEvent(e);
		},
		preventEvent: function (e) {
			if (e.stopPropagation)e.stopPropagation();
			if (e.preventDefault)e.preventDefault();
			return false;
		}};
})(jQuery);
(function ($) {
	$.extend($.fn, {
		jTree: function (options) {
			var op = $.extend({checkFn: null, selected: "selected", exp: "expandable", coll: "collapsable", firstExp: "first_expandable", firstColl: "first_collapsable", lastExp: "last_expandable", lastColl: "last_collapsable", folderExp: "folder_expandable", folderColl: "folder_collapsable", endExp: "end_expandable", endColl: "end_collapsable", file: "file", ck: "checked", unck: "unchecked"}, options);
			return this.each(function () {
				var $this = $(this);
				var cnum = $this.children().length;
				$(">li", $this).each(function () {
					var $li = $(this);
					var first = $li.prev()[0] ? false : true;
					var last = $li.next()[0] ? false : true;
					$li.genTree({
						icon: $this.hasClass("treeFolder"),
						ckbox: $this.hasClass("treeCheck"),
						options: op,
						level: 0,
						exp: (cnum > 1 ? (first ? op.firstExp : (last ? op.lastExp : op.exp)) : op.endExp),
						coll: (cnum > 1 ? (first ? op.firstColl : (last ? op.lastColl : op.coll)) : op.endColl),
						showSub: (!$this.hasClass("collapse") && ($this.hasClass("expand") || (cnum > 1 ? (first ? true : false) : true))),
						isLast: (cnum > 1 ? (last ? true : false) : true)});
				});
				setTimeout(function () {
					if ($this.hasClass("treeCheck")) {
						var checkFn = eval($this.attr("oncheck"));
						if (checkFn && $.isFunction(checkFn)) {
							$("div.ckbox", $this).each(function () {
								var ckbox = $(this);
								ckbox.click(function () {
									var checked = $(ckbox).hasClass("checked");
									var items = [];
									if (checked) {
										var tnode = $(ckbox).parent().parent();
										var boxes = $("input", tnode);
										if (boxes.size() > 1) {
											$(boxes).each(function () {
												items[items.length] = {name: $(this).attr("name"), value: $(this).val(), text: $(this).attr("text")};
											});
										} else {
											items = {name: boxes.attr("name"), value: boxes.val(), text: boxes.attr("text")};
										}
									}
									checkFn({checked: checked, items: items});
								});
							});
						}
					}
					$("a", $this).click(function (event) {
						$("div." + op.selected, $this).removeClass(op.selected);
						var parent = $(this).parent().addClass(op.selected);
						var $li = $(this).parents("li:first"), sTarget = $li.attr("target");
						if (sTarget) {
							if ($("#" + sTarget, $this).size() == 0) {
								$this.prepend('<input id="' + sTarget + '" type="hidden" />');
							}
							$("#" + sTarget, $this).val($li.attr("rel"));
						}
						$(".ckbox", parent).trigger("click");
						event.stopPropagation();
						$(document).trigger("click");
						if (!$(this).attr("target"))return false;
					});
				}, 1);
			});
		},
		subTree: function (op, level) {
			return this.each(function () {
				$(">li", this).each(function () {
					var $this = $(this);
					var isLast = ($this.next()[0] ? false : true);
					$this.genTree({
						icon: op.icon,
						ckbox: op.ckbox,
						exp: isLast ? op.options.lastExp : op.options.exp,
						coll: isLast ? op.options.lastColl : op.options.coll,
						options: op.options,
						level: level,
						space: isLast ? null : op.space,
						showSub: op.showSub,
						isLast: isLast});
				});
			});
		},
		genTree: function (options) {
			var op = $.extend({icon: options.icon, ckbox: options.ckbox, exp: "", coll: "", showSub: false, level: 0, options: null, isLast: false}, options);
			return this.each(function () {
				var node = $(this);
				var tree = $(">ul", node);
				var parent = node.parent().prev();
				var checked = 'unchecked';
				if (op.ckbox) {
					if ($(">.checked", parent).size() > 0)checked = 'checked';
				}
				if (tree.size() > 0) {
					node.children(":first").wrap("<div></div>");
					$(">div", node).prepend("<div class='" + (op.showSub ? op.coll : op.exp) + "'></div>" + (op.ckbox ? "<div class='ckbox " + checked + "'></div>" : "") + (op.icon ? "<div class='" + (op.showSub ? op.options.folderColl : op.options.folderExp) + "'></div>" : ""));
					op.showSub ? tree.show() : tree.hide();
					$(">div>div:first,>div>a", node).click(function () {
						var $fnode = $(">li:first", tree);
						if ($fnode.children(":first").isTag('a'))tree.subTree(op, op.level + 1);
						var $this = $(this);
						var isA = $this.isTag('a');
						var $this = isA ? $(">div>div", node).eq(op.level) : $this;
						if (!isA || tree.is(":hidden")) {
							$this.toggleClass(op.exp).toggleClass(op.coll);
							if (op.icon) {
								$(">div>div:last", node).toggleClass(op.options.folderExp).toggleClass(op.options.folderColl);
							}
						}
						(tree.is(":hidden")) ? tree.slideDown("fast") : (isA ? "" : tree.slideUp("fast"));
						return false;
					});
					addSpace(op.level, node);
					if (op.showSub)tree.subTree(op, op.level + 1);
				} else {
					node.children().wrap("<div></div>");
					$(">div", node).prepend("<div class='node'></div>" + (op.ckbox ? "<div class='ckbox " + checked + "'></div>" : "") + (op.icon ? "<div class='file'></div>" : ""));
					addSpace(op.level, node);
					if (op.isLast)$(node).addClass("last");
				}
				if (op.ckbox)node._check(op);
				$(">div", node).mouseover(function () {
					$(this).addClass("hover");
				}).mouseout(function () {
						$(this).removeClass("hover");
					});
				if ($.browser.msie)
					$(">div", node).click(function () {
						$("a", this).trigger("click");
						return false;
					});
			});
			function addSpace(level, node) {
				if (level > 0) {
					var parent = node.parent().parent();
					var space = !parent.next()[0] ? "indent" : "line";
					var plist = "<div class='" + space + "'></div>";
					if (level > 1) {
						var next = $(">div>div", parent).filter(":first");
						var prev = "";
						while (level > 1) {
							prev = prev + "<div class='" + next.attr("class") + "'></div>";
							next = next.next();
							level--;
						}
						plist = prev + plist;
					}
					$(">div", node).prepend(plist);
				}
			}
		},
		_check: function (op) {
			var node = $(this);
			var ckbox = $(">div>.ckbox", node);
			var $input = node.find("a");
			var tname = $input.attr("tname"), tvalue = $input.attr("tvalue");
			var attrs = "text='" + $input.text() + "' ";
			if (tname)attrs += "name='" + tname + "' ";
			if (tvalue)attrs += "value='" + tvalue + "' ";
			ckbox.append("<input type='checkbox' style='display:none;' " + attrs + "/>").click(function () {
				var cked = ckbox.hasClass("checked");
				var aClass = cked ? "unchecked" : "checked";
				var rClass = cked ? "checked" : "unchecked";
				ckbox.removeClass(rClass).removeClass(!cked ? "indeterminate" : "").addClass(aClass);
				$("input", ckbox).attr("checked", !cked);
				$(">ul", node).find("li").each(function () {
					var box = $("div.ckbox", this);
					box.removeClass(rClass).removeClass(!cked ? "indeterminate" : "").addClass(aClass)
						.find("input").attr("checked", !cked);
				});
				$(node)._checkParent();
				return false;
			});
			var cAttr = $input.attr("checked") || false;
			if (cAttr) {
				ckbox.find("input").attr("checked", true);
				ckbox.removeClass("unchecked").addClass("checked");
				$(node)._checkParent();
			}
		},
		_checkParent: function () {
			if ($(this).parent().hasClass("tree"))return;
			var parent = $(this).parent().parent();
			var stree = $(">ul", parent);
			var ckbox = stree.find(">li>a").size() + stree.find("div.ckbox").size();
			var ckboxed = stree.find("div.checked").size();
			var aClass = (ckboxed == ckbox ? "checked" : (ckboxed != 0 ? "indeterminate" : "unchecked"));
			var rClass = (ckboxed == ckbox ? "indeterminate" : (ckboxed != 0 ? "checked" : "indeterminate"));
			$(">div>.ckbox", parent).removeClass("unchecked").removeClass("checked").removeClass(rClass).addClass(aClass);
			var $checkbox = $(":checkbox", parent);
			if (aClass == "checked")$checkbox.attr("checked", "checked");
			else $checkbox.removeAttr("checked");
			parent._checkParent();
		}});
})(jQuery);
(function ($) {
	var jmenus = new Map();
	$.dwz = $.dwz || {};
	$(window).resize(function () {
		setTimeout(function () {
			for (var i = 0; i < jmenus.size(); i++) {
				fillSpace(jmenus.element(i).key);
			}
		}, 100);
	});
	$.fn.extend({
		accordion: function (options, data) {
			var args = Array.prototype.slice.call(arguments, 1);
			return this.each(function () {
				if (options.fillSpace)jmenus.put(options.fillSpace, this);
				if (typeof options == "string") {
					var accordion = $.data(this, "dwz-accordion");
					accordion[options].apply(accordion, args);
				} else if (!$(this).is(".dwz-accordion"))
					$.data(this, "dwz-accordion", new $.dwz.accordion(this, options));
			});
		},
		activate: function (index) {
			return this.accordion("activate", index);
		}});
	$.dwz.accordion = function (container, options) {
		this.options = options = $.extend({}, $.dwz.accordion.defaults, options);
		this.element = container;
		$(container).addClass("dwz-accordion");
		if (options.navigation) {
			var current = $(container).find("a").filter(options.navigationFilter);
			if (current.length) {
				if (current.filter(options.header).length) {
					options.active = current;
				} else {
					options.active = current.parent().parent().prev();
					current.addClass("current");
				}
			}
		}
		options.headers = $(container).find(options.header);
		options.active = findActive(options.headers, options.active);
		if (options.fillSpace) {
			fillSpace(options.fillSpace);
		} else if (options.autoheight) {
			var maxHeight = 0;
			options.headers.next().each(function () {
				maxHeight = Math.max(maxHeight, $(this).outerHeight());
			}).height(maxHeight);
		}
		options.headers
			.not(options.active || "")
			.next()
			.hide();
		options.active.find("h2").addClass(options.selectedClass);
		if (options.event)
			$(container).bind((options.event) + ".dwz-accordion", clickHandler);
	};
	$.dwz.accordion.prototype = {
		activate: function (index) {
			clickHandler.call(this.element, {
				target: findActive(this.options.headers, index)[0]});
		},
		enable: function () {
			this.options.disabled = false;
		},
		disable: function () {
			this.options.disabled = true;
		},
		destroy: function () {
			this.options.headers.next().css("display", "");
			if (this.options.fillSpace || this.options.autoheight) {
				this.options.headers.next().css("height", "");
			}
			$.removeData(this.element, "dwz-accordion");
			$(this.element).removeClass("dwz-accordion").unbind(".dwz-accordion");
		}}
	function scopeCallback(callback, scope) {
		return function () {
			return callback.apply(scope, arguments);
		};
	}

	function completed(cancel) {
		if (!$.data(this, "dwz-accordion"))
			return;
		var instance = $.data(this, "dwz-accordion");
		var options = instance.options;
		options.running = cancel ? 0 : --options.running;
		if (options.running)
			return;
		if (options.clearStyle) {
			options.toShow.add(options.toHide).css({
				height: "",
				overflow: ""});
		}
		$(this).triggerHandler("change.dwz-accordion", [options.data], options.change);
	}

	function fillSpace(key) {
		var obj = jmenus.get(key);
		if (!obj)return;
		var parent = $(obj).parent();
		var height = parent.height() - (($(".accordionHeader", obj).size()) * ($(".accordionHeader:first-child", obj).outerHeight())) - 2;
		var os = parent.children().not(obj);
		$.each(os, function (i) {
			height -= $(os[i]).outerHeight();
		});
		$(".accordionContent", obj).height(height);
	}

	function toggle(toShow, toHide, data, clickedActive, down) {
		var options = $.data(this, "dwz-accordion").options;
		options.toShow = toShow;
		options.toHide = toHide;
		options.data = data;
		var complete = scopeCallback(completed, this);
		options.running = toHide.size() == 0 ? toShow.size() : toHide.size();
		if (options.animated) {
			if (!options.alwaysOpen && clickedActive) {
				$.dwz.accordion.animations[options.animated]({
					toShow: jQuery([]),
					toHide: toHide,
					complete: complete,
					down: down,
					autoheight: options.autoheight});
			} else {
				$.dwz.accordion.animations[options.animated]({
					toShow: toShow,
					toHide: toHide,
					complete: complete,
					down: down,
					autoheight: options.autoheight});
			}
		} else {
			if (!options.alwaysOpen && clickedActive) {
				toShow.toggle();
			} else {
				toHide.hide();
				toShow.show();
			}
			complete(true);
		}
	}

	function clickHandler(event) {
		var options = $.data(this, "dwz-accordion").options;
		if (options.disabled)
			return false;
		if (!event.target && !options.alwaysOpen) {
			options.active.find("h2").toggleClass(options.selectedClass);
			var toHide = options.active.next(),
				data = {
					instance: this,
					options: options,
					newHeader: jQuery([]),
					oldHeader: options.active,
					newContent: jQuery([]),
					oldContent: toHide},
				toShow = options.active = $([]);
			toggle.call(this, toShow, toHide, data);
			return false;
		}
		var clicked = $(event.target);
		if (clicked.parents(options.header).length)
			while (!clicked.is(options.header))
				clicked = clicked.parent();
		var clickedActive = clicked[0] == options.active[0];
		if (options.running || (options.alwaysOpen && clickedActive))
			return false;
		if (!clicked.is(options.header))
			return;
		options.active.find("h2").toggleClass(options.selectedClass);
		if (!clickedActive) {
			clicked.find("h2").addClass(options.selectedClass);
		}
		var toShow = clicked.next(),
			toHide = options.active.next(),
			data = {
				instance: this,
				options: options,
				newHeader: clicked,
				oldHeader: options.active,
				newContent: toShow,
				oldContent: toHide},
			down = options.headers.index(options.active[0]) > options.headers.index(clicked[0]);
		options.active = clickedActive ? $([]) : clicked;
		toggle.call(this, toShow, toHide, data, clickedActive, down);
		return false;
	};
	function findActive(headers, selector) {
		return selector != undefined ? typeof selector == "number" ? headers.filter(":eq(" + selector + ")") : headers.not(headers.not(selector)) : selector === false ? $([]) : headers.filter(":eq(0)");
	}

	$.extend($.dwz.accordion, {
		defaults: {
			selectedClass: "collapsable",
			alwaysOpen: true,
			animated: 'slide',
			event: "click",
			header: ".accordionHeader",
			autoheight: true,
			running: 0,
			navigationFilter: function () {
				return this.href.toLowerCase() == location.href.toLowerCase();
			}},
		animations: {
			slide: function (options, additions) {
				options = $.extend({
					easing: "swing",
					duration: 300}, options, additions);
				if (!options.toHide.size()) {
					options.toShow.animate({height: "show"}, options);
					return;
				}
				var hideHeight = options.toHide.height(),
					showHeight = options.toShow.height(),
					difference = showHeight / hideHeight;
				options.toShow.css({height: 0}).show();
				options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate({height: "hide"}, {
					step: function (now) {
						var current = (hideHeight - now) * difference;
						if ($.browser.msie || $.browser.opera) {
							current = Math.ceil(current);
						}
						options.toShow.height(current);
					},
					duration: options.duration,
					easing: options.easing,
					complete: function () {
						if (!options.autoheight) {
							options.toShow.css({height: "auto"});
						}
						options.toShow.css({overflow: "auto"});
						options.complete();
					}});
			},
			bounceslide: function (options) {
				this.slide(options, {
					easing: options.down ? "bounceout" : "swing",
					duration: options.down ? 1000 : 200});
			},
			easeslide: function (options) {
				this.slide(options, {
					easing: "easeinout",
					duration: 700})
			}}});
})(jQuery);
function initEnv() {
	$("body").append(DWZ.frag["dwzFrag"]);
	if ($.browser.msie && /6.0/.test(navigator.userAgent)) {
		try {
			document.execCommand("BackgroundImageCache", false, true);
		} catch (e) {
		}
	}
	if ($.browser.msie) {
		window.setInterval("CollectGarbage();", 10000);
	}
	$(window).resize(function () {
		initLayout();
		$(this).trigger(DWZ.eventType.resizeGrid);
	});
	var ajaxbg = $("#background,#progressBar");
	ajaxbg.hide();
	$(document).ajaxStart(function () {
		ajaxbg.show();
	}).ajaxStop(function () {
			ajaxbg.hide();
		});
	$("#leftside").jBar({minW: 150, maxW: 700});
	if ($.taskBar)$.taskBar.init();
	navTab.init();
	if ($.fn.switchEnv)$("#switchEnvBox").switchEnv();
	if ($.fn.navMenu)$("#navMenu").navMenu();
	setTimeout(function () {
		initLayout();
		initUI();
		var jTabsPH = $("div.tabsPageHeader");
		jTabsPH.find(".tabsLeft").hoverClass("tabsLeftHover");
		jTabsPH.find(".tabsRight").hoverClass("tabsRightHover");
		jTabsPH.find(".tabsMore").hoverClass("tabsMoreHover");
	}, 10);
}
function initLayout() {
	var iContentW = $(window).width() - (DWZ.ui.sbar ? $("#sidebar").width() + 10 : 34) - 5;
	var iContentH = $(window).height() - $("#header").height() - 34;
	$("#container").width(iContentW);
	$("#container .tabsPageContent").height(iContentH - 34).find("[layoutH]").layoutH();
	$("#sidebar, #sidebar_s .collapse, #splitBar, #splitBarProxy").height(iContentH - 5);
	$("#taskbar").css({top: iContentH + $("#header").height() + 5, width: $(window).width()});
}
function initUI(_box) {
	var $p = $(_box || document);
	$("div.panel", $p).jPanel();
	$("table.table", $p).jTable();
	$('table.list', $p).cssTable();
	$("div.tabs", $p).each(function () {
		var $this = $(this);
		var options = {};
		options.currentIndex = $this.attr("currentIndex") || 0;
		options.eventType = $this.attr("eventType") || "click";
		$this.tabs(options);
	});
	$("ul.tree", $p).jTree();
	$('div.accordion', $p).each(function () {
		var $this = $(this);
		$this.accordion({fillSpace: $this.attr("fillSpace"), alwaysOpen: true, active: 0});
	});
	$(":button.checkboxCtrl, :checkbox.checkboxCtrl", $p).checkboxCtrl($p);
	if ($.fn.combox)$("select.combox", $p).combox();
	if ($.fn.xheditor) {
		$("textarea.editor", $p).each(function () {
			var $this = $(this);
			var op = {html5Upload: false, skin: 'vista', tools: $this.attr("tools") || 'full'};
			var upAttrs = [
				["upLinkUrl", "upLinkExt", "zip,rar,txt"],
				["upImgUrl", "upImgExt", "jpg,jpeg,gif,png"],
				["upFlashUrl", "upFlashExt", "swf"],
				["upMediaUrl", "upMediaExt", "avi"]
			];
			$(upAttrs).each(function (i) {
				var urlAttr = upAttrs[i][0];
				var extAttr = upAttrs[i][1];
				if ($this.attr(urlAttr)) {
					op[urlAttr] = $this.attr(urlAttr);
					op[extAttr] = $this.attr(extAttr) || upAttrs[i][2];
				}
			});
			$this.xheditor(op);
		});
	}
	$("textarea.kindeditor", $p).each(function () {
		var textarea_name = $(this).attr('name');
		KindEditor.create('textarea[name="' + textarea_name + '"]', {
			items: [
				'undo', 'redo', '|', 'cut', 'copy', 'paste', 'template','plainpaste', 'wordpaste', '|',
				'justifyleft', 'justifycenter', 'justifyright','justifyfull', 'insertorderedlist',
				'insertunorderedlist', 'indent', 'outdent', 'subscript','superscript', 'clearhtml',
				'quickformat', 'selectall', '|', 'anchor', 'link', 'unlink', '/',
				'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
				'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image',
				'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak', '|',
				'source', 'preview', 'print', 'fullscreen'
			]
		});
	});
	if ($.fn.uploadify) {
		$(":file[uploaderOption]", $p).each(function () {
			var $this = $(this);
			var options = {
				fileObjName: $this.attr("name") || "file",
				auto: true,
				multi: true,
				onUploadError: uploadifyError};
			var uploaderOption = DWZ.jsonEval($this.attr("uploaderOption"));
			$.extend(options, uploaderOption);
			DWZ.debug("uploaderOption: " + DWZ.obj2str(uploaderOption));
			$this.uploadify(options);
		});
	}
	$("input[type=text], input[type=password], textarea", $p).addClass("textInput").focusClass("focus");
	$("input[readonly], textarea[readonly]", $p).addClass("readonly");
	$("input[disabled=true], textarea[disabled=true]", $p).addClass("disabled");
	$("input[type=text]", $p).not("div.tabs input[type=text]", $p).filter("[alt]").inputAlert();
	$("div.panelBar li, div.panelBar", $p).hoverClass("hover");
	$("div.button", $p).hoverClass("buttonHover");
	$("div.buttonActive", $p).hoverClass("buttonActiveHover");
	$("div.tabsHeader li, div.tabsPageHeader li, div.accordionHeader, div.accordion", $p).hoverClass("hover");
	$("form.required-validate", $p).each(function () {
		var $form = $(this);
		$form.validate({
			onsubmit: false,
			focusInvalid: false,
			focusCleanup: true,
			errorElement: "span",
			ignore: ".ignore",
			invalidHandler: function (form, validator) {
				var errors = validator.numberOfInvalids();
				if (errors) {
					var message = DWZ.msg("validateFormError", [errors]);
					alertMsg.error(message);
				}
			}});
		$form.find('input[customvalid]').each(function () {
			var $input = $(this);
			$input.rules("add", {
				customvalid: $input.attr("customvalid")})
		});
	});
	if ($.fn.datepicker) {
		$('input.date', $p).each(function () {
			var $this = $(this);
			var opts = {};
			if ($this.attr("dateFmt"))opts.pattern = $this.attr("dateFmt");
			if ($this.attr("minDate"))opts.minDate = $this.attr("minDate");
			if ($this.attr("maxDate"))opts.maxDate = $this.attr("maxDate");
			if ($this.attr("mmStep"))opts.mmStep = $this.attr("mmStep");
			if ($this.attr("ssStep"))opts.ssStep = $this.attr("ssStep");
			$this.datepicker(opts);
		});
	}
	$("a[target=navTab]", $p).each(function () {
		$(this).click(function (event) {
			var $this = $(this);
			var title = $this.attr("title") || $this.text();
			var tabid = $this.attr("rel") || "_blank";
			var fresh = eval($this.attr("fresh") || "true");
			var external = eval($this.attr("external") || "false");
			var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
			DWZ.debug(url);
			if (!url.isFinishedTm()) {
				alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
				return false;
			}
			navTab.openTab(tabid, url, {title: title, fresh: fresh, external: external});
			event.preventDefault();
		});
	});
	$("a[target=dialog]", $p).each(function () {
		$(this).click(function (event) {
			var $this = $(this);
			var title = $this.attr("title") || $this.text();
			var rel = $this.attr("rel") || "_blank";
			var options = {};
			var w = $this.attr("width");
			var h = $this.attr("height");
			if (w)options.width = w;
			if (h)options.height = h;
			options.max = eval($this.attr("max") || "false");
			options.mask = eval($this.attr("mask") || "false");
			options.maxable = eval($this.attr("maxable") || "true");
			options.minable = eval($this.attr("minable") || "true");
			options.fresh = eval($this.attr("fresh") || "true");
			options.resizable = eval($this.attr("resizable") || "true");
			options.drawable = eval($this.attr("drawable") || "true");
			options.close = eval($this.attr("close") || "");
			options.param = $this.attr("param") || "";
			var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
			DWZ.debug(url);
			if (!url.isFinishedTm()) {
				alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
				return false;
			}
			$.pdialog.open(url, rel, title, options);
			return false;
		});
	});
	$("a[target=ajax]", $p).each(function () {
		$(this).click(function (event) {
			var $this = $(this);
			var rel = $this.attr("rel");
			if (rel) {
				var $rel = $("#" + rel);
				$rel.loadUrl($this.attr("href"), {}, function () {
					$rel.find("[layoutH]").layoutH();
				});
			}
			event.preventDefault();
		});
	});
	$("div.pagination", $p).each(function () {
		var $this = $(this);
		$this.pagination({
			targetType: $this.attr("targetType"),
			rel: $this.attr("rel"),
			totalCount: $this.attr("totalCount"),
			numPerPage: $this.attr("numPerPage"),
			pageNumShown: $this.attr("pageNumShown"),
			currentPage: $this.attr("currentPage")});
	});
	if ($.fn.sortDrag)$("div.sortDrag", $p).sortDrag();
	if ($.fn.ajaxTodo)$("a[target=ajaxTodo]", $p).ajaxTodo();
	if ($.fn.dwzExport)$("a[target=dwzExport]", $p).dwzExport();
	if ($.fn.lookup)$("a[lookupGroup]", $p).lookup();
	if ($.fn.multLookup)$("[multLookup]:button", $p).multLookup();
	if ($.fn.suggest)$("input[suggestFields]", $p).suggest();
	if ($.fn.itemDetail)$("table.itemDetail", $p).itemDetail();
	if ($.fn.selectedTodo)$("a[target=selectedTodo]", $p).selectedTodo();
	if ($.fn.pagerForm)$("form[rel=pagerForm]", $p).pagerForm({parentBox: $p});
}
(function ($) {
	$.fn.extend({
		theme: function (options) {
			var op = $.extend({themeBase: "themes"}, options);
			var _themeHref = op.themeBase + "/#theme#/style.css";
			return this.each(function () {
				var jThemeLi = $(this).find(">li[theme]");
				var setTheme = function (themeName) {
					$("head").find("link[href$='style.css']").attr("href", _themeHref.replace("#theme#", themeName));
					jThemeLi.find(">div").removeClass("selected");
					jThemeLi.filter("[theme=" + themeName + "]").find(">div").addClass("selected");
					if ($.isFunction($.cookie))$.cookie("dwz_theme", themeName);
				}
				jThemeLi.each(function (index) {
					var $this = $(this);
					var themeName = $this.attr("theme");
					$this.addClass(themeName).click(function () {
						setTheme(themeName);
					});
				});
				if ($.isFunction($.cookie)) {
					var themeName = $.cookie("dwz_theme");
					if (themeName) {
						setTheme(themeName);
					}
				}
			});
		}});
})(jQuery);
(function ($) {
	$.fn.navMenu = function () {
		return this.each(function () {
			var $box = $(this);
			$box.find("li>a").click(function () {
				var $a = $(this);
				$.post($a.attr("href"), {}, function (html) {
					$("#sidebar").find(".accordion").remove().end().append(html).initUI();
					$box.find("li").removeClass("selected");
					$a.parent().addClass("selected");
					navTab.closeAllTab();
				});
				return false;
			});
		});
	}
	$.fn.switchEnv = function () {
		var op = {cities$: ">ul>li", boxTitle$: ">a>span"};
		return this.each(function () {
			var $this = $(this);
			$this.click(function () {
				if ($this.hasClass("selected")) {
					_hide($this);
				} else {
					_show($this);
				}
				return false;
			});
			$this.find(op.cities$).click(function () {
				var $li = $(this);
				$.post($li.find(">a").attr("href"), {}, function (html) {
					_hide($this);
					$this.find(op.boxTitle$).html($li.find(">a").html());
					navTab.closeAllTab();
					$("#sidebar").find(".accordion").remove().end().append(html).initUI();
				});
				return false;
			});
		});
	}
	function _show($box) {
		$box.addClass("selected");
		$(document).bind("click", {box: $box}, _handler);
	}

	function _hide($box) {
		$box.removeClass("selected");
		$(document).unbind("click", _handler);
	}

	function _handler(event) {
		_hide(event.data.box);
	}
})(jQuery);
$.setRegional("alertMsg", {
	title: {error: "Error", info: "Information", warn: "Warning", correct: "Successful", confirm: "Confirmation"},
	butMsg: {ok: "OK", yes: "Yes", no: "No", cancel: "Cancel"}});
var alertMsg = {
	_boxId: "#alertMsgBox",
	_bgId: "#alertBackground",
	_closeTimer: null,
	_types: {error: "error", info: "info", warn: "warn", correct: "correct", confirm: "confirm"},
	_getTitle: function (key) {
		return $.regional.alertMsg.title[key];
	},
	_keydownOk: function (event) {
		if (event.keyCode == DWZ.keyCode.ENTER)event.data.target.trigger("click");
		return false;
	},
	_keydownEsc: function (event) {
		if (event.keyCode == DWZ.keyCode.ESC)event.data.target.trigger("click");
	},
	_open: function (type, msg, buttons) {
		$(this._boxId).remove();
		var butsHtml = "";
		if (buttons) {
			for (var i = 0; i < buttons.length; i++) {
				var sRel = buttons[i].call ? "callback" : "";
				butsHtml += DWZ.frag["alertButFrag"].replace("#butMsg#", buttons[i].name).replace("#callback#", sRel);
			}
		}
		var boxHtml = DWZ.frag["alertBoxFrag"].replace("#type#", type).replace("#title#", this._getTitle(type)).replace("#message#", msg).replace("#butFragment#", butsHtml);
		$(boxHtml).appendTo("body").css({top: -$(this._boxId).height() + "px"}).animate({top: "0px"}, 500);
		if (this._closeTimer) {
			clearTimeout(this._closeTimer);
			this._closeTimer = null;
		}
		if (this._types.info == type || this._types.correct == type) {
			this._closeTimer = setTimeout(function () {
				alertMsg.close()
			}, 3500);
		} else {
			$(this._bgId).show();
		}
		$('<input type="text" style="width:0;height:0;" name="_alertFocusCtr"/>').appendTo(this._boxId).focus().hide();
		var jButs = $(this._boxId).find("a.button");
		var jCallButs = jButs.filter("[rel=callback]");
		var jDoc = $(document);
		for (var i = 0; i < buttons.length; i++) {
			if (buttons[i].call)jCallButs.eq(i).click(buttons[i].call);
			if (buttons[i].keyCode == DWZ.keyCode.ENTER) {
				jDoc.bind("keydown", {target: jButs.eq(i)}, this._keydownOk);
			}
			if (buttons[i].keyCode == DWZ.keyCode.ESC) {
				jDoc.bind("keydown", {target: jButs.eq(i)}, this._keydownEsc);
			}
		}
	},
	close: function () {
		$(document).unbind("keydown", this._keydownOk).unbind("keydown", this._keydownEsc);
		$(this._boxId).animate({top: -$(this._boxId).height()}, 500, function () {
			$(this).remove();
		});
		$(this._bgId).hide();
	},
	error: function (msg, options) {
		this._alert(this._types.error, msg, options);
	},
	info: function (msg, options) {
		this._alert(this._types.info, msg, options);
	},
	warn: function (msg, options) {
		this._alert(this._types.warn, msg, options);
	},
	correct: function (msg, options) {
		this._alert(this._types.correct, msg, options);
	},
	_alert: function (type, msg, options) {
		var op = {okName: $.regional.alertMsg.butMsg.ok, okCall: null};
		$.extend(op, options);
		var buttons = [
			{name: op.okName, call: op.okCall, keyCode: DWZ.keyCode.ENTER}
		];
		this._open(type, msg, buttons);
	},
	confirm: function (msg, options) {
		var op = {okName: $.regional.alertMsg.butMsg.ok, okCall: null, cancelName: $.regional.alertMsg.butMsg.cancel, cancelCall: null};
		$.extend(op, options);
		var buttons = [
			{name: op.okName, call: op.okCall, keyCode: DWZ.keyCode.ENTER},
			{name: op.cancelName, call: op.cancelCall, keyCode: DWZ.keyCode.ESC}
		];
		this._open(this._types.confirm, msg, buttons);
	}};
(function ($) {
	var menu, shadow, hash;
	$.fn.extend({
		contextMenu: function (id, options) {
			var op = $.extend({
				shadow: true,
				bindings: {},
				ctrSub: null}, options);
			if (!menu) {
				menu = $('<div id="contextmenu"></div>').appendTo('body').hide();
			}
			if (!shadow) {
				shadow = $('<div id="contextmenuShadow"></div>').appendTo('body').hide();
			}
			hash = hash || [];
			hash.push({
				id: id,
				shadow: op.shadow,
				bindings: op.bindings || {},
				ctrSub: op.ctrSub});
			var index = hash.length - 1;
			$(this).bind('contextmenu', function (e) {
				display(index, this, e, op);
				return false;
			});
			return this;
		}});
	function display(index, trigger, e, options) {
		var cur = hash[index];
		var content = $(DWZ.frag[cur.id]);
		content.find('li').hoverClass();
		menu.html(content);
		$.each(cur.bindings, function (id, func) {
			$("[rel='" + id + "']", menu).bind('click', function (e) {
				hide();
				func($(trigger), $("#" + cur.id));
			});
		});
		var posX = e.pageX;
		var posY = e.pageY;
		if ($(window).width() < posX + menu.width())posX -= menu.width();
		if ($(window).height() < posY + menu.height())posY -= menu.height();
		menu.css({'left': posX, 'top': posY}).show();
		if (cur.shadow)shadow.css({width: menu.width(), height: menu.height(), left: posX + 3, top: posY + 3}).show();
		$(document).one('click', hide);
		if ($.isFunction(cur.ctrSub)) {
			cur.ctrSub($(trigger), $("#" + cur.id));
		}
	}

	function hide() {
		menu.hide();
		shadow.hide();
	}
})(jQuery);
var navTab = {
	componentBox: null,
	_tabBox: null,
	_prevBut: null,
	_nextBut: null,
	_panelBox: null,
	_moreBut: null,
	_moreBox: null,
	_currentIndex: 0,
	_op: {id: "navTab", stTabBox: ".navTab-tab", stPanelBox: ".navTab-panel", mainTabId: "main", close$: "a.close", prevClass: "tabsLeft", nextClass: "tabsRight", stMore: ".tabsMore", stMoreLi: "ul.tabsMoreList"},
	init: function (options) {
		if ($.History)$.History.init("#container");
		var $this = this;
		$.extend(this._op, options);
		this.componentBox = $("#" + this._op.id);
		this._tabBox = this.componentBox.find(this._op.stTabBox);
		this._panelBox = this.componentBox.find(this._op.stPanelBox);
		this._prevBut = this.componentBox.find("." + this._op.prevClass);
		this._nextBut = this.componentBox.find("." + this._op.nextClass);
		this._moreBut = this.componentBox.find(this._op.stMore);
		this._moreBox = this.componentBox.find(this._op.stMoreLi);
		this._prevBut.click(function (event) {
			$this._scrollPrev()
		});
		this._nextBut.click(function (event) {
			$this._scrollNext()
		});
		this._moreBut.click(function () {
			$this._moreBox.show();
			return false;
		});
		$(document).click(function () {
			$this._moreBox.hide()
		});
		this._contextmenu(this._tabBox);
		this._contextmenu(this._getTabs());
		this._init();
		this._ctrlScrollBut();
	},
	_init: function () {
		var $this = this;
		this._getTabs().each(function (iTabIndex) {
			$(this).unbind("click").click(function (event) {
				$this._switchTab(iTabIndex);
			});
			$(this).find(navTab._op.close$).unbind("click").click(function () {
				$this._closeTab(iTabIndex);
			});
		});
		this._getMoreLi().each(function (iTabIndex) {
			$(this).find(">a").unbind("click").click(function (event) {
				$this._switchTab(iTabIndex);
			});
		});
		this._switchTab(this._currentIndex);
	},
	_contextmenu: function ($obj) {
		var $this = this;
		$obj.contextMenu('navTabCM', {
			bindings: {
				reload: function (t, m) {
					$this._reload(t, true);
				},
				closeCurrent: function (t, m) {
					var tabId = t.attr("tabid");
					if (tabId)$this.closeTab(tabId);
					else $this.closeCurrentTab();
				},
				closeOther: function (t, m) {
					var index = $this._indexTabId(t.attr("tabid"));
					$this._closeOtherTab(index > 0 ? index : $this._currentIndex);
				},
				closeAll: function (t, m) {
					$this.closeAllTab();
				}},
			ctrSub: function (t, m) {
				var mReload = m.find("[rel='reload']");
				var mCur = m.find("[rel='closeCurrent']");
				var mOther = m.find("[rel='closeOther']");
				var mAll = m.find("[rel='closeAll']");
				var $tabLi = $this._getTabs();
				if ($tabLi.size() < 2) {
					mCur.addClass("disabled");
					mOther.addClass("disabled");
					mAll.addClass("disabled");
				}
				if ($this._currentIndex == 0 || t.attr("tabid") == $this._op.mainTabId) {
					mCur.addClass("disabled");
					mReload.addClass("disabled");
				} else if ($tabLi.size() == 2) {
					mOther.addClass("disabled");
				}
			}});
	},
	_getTabs: function () {
		return this._tabBox.find("> li");
	},
	_getPanels: function () {
		return this._panelBox.find("> div");
	},
	_getMoreLi: function () {
		return this._moreBox.find("> li");
	},
	_getTab: function (tabid) {
		var index = this._indexTabId(tabid);
		if (index >= 0)return this._getTabs().eq(index);
	},
	getPanel: function (tabid) {
		var index = this._indexTabId(tabid);
		if (index >= 0)return this._getPanels().eq(index);
	},
	_getTabsW: function (iStart, iEnd) {
		return this._tabsW(this._getTabs().slice(iStart, iEnd));
	},
	_tabsW: function ($tabs) {
		var iW = 0;
		$tabs.each(function () {
			iW += $(this).outerWidth(true);
		});
		return iW;
	},
	_indexTabId: function (tabid) {
		if (!tabid)return -1;
		var iOpenIndex = -1;
		this._getTabs().each(function (index) {
			if ($(this).attr("tabid") == tabid) {
				iOpenIndex = index;
				return;
			}
		});
		return iOpenIndex;
	},
	_getLeft: function () {
		return this._tabBox.position().left;
	},
	_getScrollBarW: function () {
		return this.componentBox.width() - 55;
	},
	_visibleStart: function () {
		var iLeft = this._getLeft(), iW = 0;
		var $tabs = this._getTabs();
		for (var i = 0; i < $tabs.size(); i++) {
			if (iW + iLeft >= 0)return i;
			iW += $tabs.eq(i).outerWidth(true);
		}
		return 0;
	},
	_visibleEnd: function () {
		var iLeft = this._getLeft(), iW = 0;
		var $tabs = this._getTabs();
		for (var i = 0; i < $tabs.size(); i++) {
			iW += $tabs.eq(i).outerWidth(true);
			if (iW + iLeft > this._getScrollBarW())return i;
		}
		return $tabs.size();
	},
	_scrollPrev: function () {
		var iStart = this._visibleStart();
		if (iStart > 0) {
			this._scrollTab(-this._getTabsW(0, iStart - 1));
		}
	},
	_scrollNext: function () {
		var iEnd = this._visibleEnd();
		if (iEnd < this._getTabs().size()) {
			this._scrollTab(-this._getTabsW(0, iEnd + 1) + this._getScrollBarW());
		}
	},
	_scrollTab: function (iLeft, isNext) {
		var $this = this;
		this._tabBox.animate({left: iLeft + 'px'}, 200, function () {
			$this._ctrlScrollBut();
		});
	},
	_scrollCurrent: function () {
		var iW = this._tabsW(this._getTabs());
		if (iW <= this._getScrollBarW()) {
			this._scrollTab(0);
		} else if (this._getLeft() < this._getScrollBarW() - iW) {
			this._scrollTab(this._getScrollBarW() - iW);
		} else if (this._currentIndex < this._visibleStart()) {
			this._scrollTab(-this._getTabsW(0, this._currentIndex));
		} else if (this._currentIndex >= this._visibleEnd()) {
			this._scrollTab(this._getScrollBarW() - this._getTabs().eq(this._currentIndex).outerWidth(true) - this._getTabsW(0, this._currentIndex));
		}
	},
	_ctrlScrollBut: function () {
		var iW = this._tabsW(this._getTabs());
		if (this._getScrollBarW() > iW) {
			this._prevBut.hide();
			this._nextBut.hide();
			this._tabBox.parent().removeClass("tabsPageHeaderMargin");
		} else {
			this._prevBut.show().removeClass("tabsLeftDisabled");
			this._nextBut.show().removeClass("tabsRightDisabled");
			this._tabBox.parent().addClass("tabsPageHeaderMargin");
			if (this._getLeft() >= 0) {
				this._prevBut.addClass("tabsLeftDisabled");
			} else if (this._getLeft() <= this._getScrollBarW() - iW) {
				this._nextBut.addClass("tabsRightDisabled");
			}
		}
	},
	_switchTab: function (iTabIndex) {
		var $tab = this._getTabs().removeClass("selected").eq(iTabIndex).addClass("selected");
		this._getPanels().hide().eq(iTabIndex).show();
		this._getMoreLi().removeClass("selected").eq(iTabIndex).addClass("selected");
		this._currentIndex = iTabIndex;
		this._scrollCurrent();
		this._reload($tab);
	},
	_closeTab: function (index, openTabid) {
		this._getTabs().eq(index).remove();
		this._getPanels().eq(index).trigger(DWZ.eventType.pageClear).remove();
		this._getMoreLi().eq(index).remove();
		if (this._currentIndex >= index)this._currentIndex--;
		if (openTabid) {
			var openIndex = this._indexTabId(openTabid);
			if (openIndex > 0)this._currentIndex = openIndex;
		}
		this._init();
		this._scrollCurrent();
		this._reload(this._getTabs().eq(this._currentIndex));
	},
	closeTab: function (tabid) {
		var index = this._indexTabId(tabid);
		if (index > 0) {
			this._closeTab(index);
		}
	},
	closeCurrentTab: function (openTabid) {
		if (this._currentIndex > 0) {
			this._closeTab(this._currentIndex, openTabid);
		}
	},
	closeAllTab: function () {
		this._getTabs().filter(":gt(0)").remove();
		this._getPanels().filter(":gt(0)").trigger(DWZ.eventType.pageClear).remove();
		this._getMoreLi().filter(":gt(0)").remove();
		this._currentIndex = 0;
		this._init();
		this._scrollCurrent();
	},
	_closeOtherTab: function (index) {
		index = index || this._currentIndex;
		if (index > 0) {
			var str$ = ":eq(" + index + ")";
			this._getTabs().not(str$).filter(":gt(0)").remove();
			this._getPanels().not(str$).filter(":gt(0)").trigger(DWZ.eventType.pageClear).remove();
			this._getMoreLi().not(str$).filter(":gt(0)").remove();
			this._currentIndex = 1;
			this._init();
			this._scrollCurrent();
		} else {
			this.closeAllTab();
		}
	},
	_loadUrlCallback: function ($panel) {
		$panel.find("[layoutH]").layoutH();
		$panel.find(":button.close").click(function () {
			navTab.closeCurrentTab();
		});
	},
	_reload: function ($tab, flag) {
		flag = flag || $tab.data("reloadFlag");
		var url = $tab.attr("url");
		if (flag && url) {
			$tab.data("reloadFlag", null);
			var $panel = this.getPanel($tab.attr("tabid"));
			if ($tab.hasClass("external")) {
				navTab.openExternal(url, $panel);
			} else {
				var $pagerForm = $("#pagerForm", $panel);
				var args = $pagerForm.size() > 0 ? $pagerForm.serializeArray() : {}
				$panel.loadUrl(url, args, function () {
					navTab._loadUrlCallback($panel);
				});
			}
		}
	},
	reloadFlag: function (tabid) {
		var $tab = this._getTab(tabid);
		if ($tab) {
			if (this._indexTabId(tabid) == this._currentIndex)this._reload($tab, true);
			else $tab.data("reloadFlag", 1);
		}
	},
	reload: function (url, options) {
		var op = $.extend({data: {}, navTabId: "", callback: null}, options);
		var $tab = op.navTabId ? this._getTab(op.navTabId) : this._getTabs().eq(this._currentIndex);
		var $panel = op.navTabId ? this.getPanel(op.navTabId) : this._getPanels().eq(this._currentIndex);
		if ($panel) {
			if (!url) {
				url = $tab.attr("url");
			}
			if (url) {
				if ($tab.hasClass("external")) {
					navTab.openExternal(url, $panel);
				} else {
					if ($.isEmptyObject(op.data)) {
						var $pagerForm = $("#pagerForm", $panel);
						op.data = $pagerForm.size() > 0 ? $pagerForm.serializeArray() : {}
					}
					$panel.ajaxUrl({
						type: "POST", url: url, data: op.data, callback: function (response) {
							navTab._loadUrlCallback($panel);
							if ($.isFunction(op.callback))op.callback(response);
						}});
				}
			}
		}
	},
	getCurrentPanel: function () {
		return this._getPanels().eq(this._currentIndex);
	},
	checkTimeout: function () {
		var json = DWZ.jsonEval(this.getCurrentPanel().html());
		if (json && json.statusCode == DWZ.statusCode.timeout)this.closeCurrentTab();
	},
	openExternal: function (url, $panel) {
		var ih = navTab._panelBox.height();
		$panel.html(DWZ.frag["externalFrag"].replaceAll("{url}", url).replaceAll("{height}", ih + "px"));
	},
	openTab: function (tabid, url, options) {
		var op = $.extend({title: "New Tab", data: {}, fresh: true, external: false}, options);
		var iOpenIndex = this._indexTabId(tabid);
		if (iOpenIndex >= 0) {
			var $tab = this._getTabs().eq(iOpenIndex);
			var span$ = $tab.attr("tabid") == this._op.mainTabId ? "> span > span" : "> span";
			$tab.find(">a").attr("title", op.title).find(span$).text(op.title);
			var $panel = this._getPanels().eq(iOpenIndex);
			if (op.fresh || $tab.attr("url") != url) {
				$tab.attr("url", url);
				if (op.external || url.isExternalUrl()) {
					$tab.addClass("external");
					navTab.openExternal(url, $panel);
				} else {
					$tab.removeClass("external");
					$panel.ajaxUrl({
						type: "GET", url: url, data: op.data, callback: function () {
							navTab._loadUrlCallback($panel);
						}});
				}
			}
			this._currentIndex = iOpenIndex;
		} else {
			var tabFrag = '<li tabid="#tabid#"><a href="javascript:" title="#title#" class="#tabid#"><span>#title#</span></a><a href="javascript:;" class="close">close</a></li>';
			this._tabBox.append(tabFrag.replaceAll("#tabid#", tabid).replaceAll("#title#", op.title));
			this._panelBox.append('<div class="page unitBox"></div>');
			this._moreBox.append('<li><a href="javascript:" title="#title#">#title#</a></li>'.replaceAll("#title#", op.title));
			var $tabs = this._getTabs();
			var $tab = $tabs.filter(":last");
			var $panel = this._getPanels().filter(":last");
			if (op.external || url.isExternalUrl()) {
				$tab.addClass("external");
				navTab.openExternal(url, $panel);
			} else {
				$tab.removeClass("external");
				$panel.ajaxUrl({
					type: "GET", url: url, data: op.data, callback: function () {
						navTab._loadUrlCallback($panel);
					}});
			}
			if ($.History) {
				setTimeout(function () {
					$.History.addHistory(tabid, function (tabid) {
						var i = navTab._indexTabId(tabid);
						if (i >= 0)navTab._switchTab(i);
					}, tabid);
				}, 10);
			}
			this._currentIndex = $tabs.size() - 1;
			this._contextmenu($tabs.filter(":last").hoverClass("hover"));
		}
		this._init();
		this._scrollCurrent();
		this._getTabs().eq(this._currentIndex).attr("url", url);
	}};
(function ($) {
	$.fn.extend({
		tabs: function (options) {
			var op = $.extend({reverse: false, eventType: "click", currentIndex: 0, stTabHeader: "> .tabsHeader", stTab: ">.tabsHeaderContent>ul", stTabPanel: "> .tabsContent", ajaxClass: "j-ajax", closeClass: "close", prevClass: "tabsLeft", nextClass: "tabsRight"}, options);
			return this.each(function () {
				initTab($(this));
			});
			function initTab(jT) {
				var jSelector = jT.add($("> *", jT));
				var jTabHeader = $(op.stTabHeader, jSelector);
				var jTabs = $(op.stTab + " li", jTabHeader);
				var jGroups = $(op.stTabPanel + " > *", jSelector);
				jTabs.unbind().find("a").unbind();
				jTabHeader.find("." + op.prevClass).unbind();
				jTabHeader.find("." + op.nextClass).unbind();
				jTabs.each(function (iTabIndex) {
					if (op.currentIndex == iTabIndex)$(this).addClass("selected");
					else $(this).removeClass("selected");
					if (op.eventType == "hover")$(this).hover(function (event) {
						switchTab(jT, iTabIndex)
					});
					else $(this).click(function (event) {
						switchTab(jT, iTabIndex)
					});
					$("a", this).each(function () {
						if ($(this).hasClass(op.ajaxClass)) {
							$(this).click(function (event) {
								var jGroup = jGroups.eq(iTabIndex);
								if (this.href && !jGroup.attr("loaded"))jGroup.loadUrl(this.href, {}, function () {
									jGroup.find("[layoutH]").layoutH();
									jGroup.attr("loaded", true);
								});
								event.preventDefault();
							});
						} else if ($(this).hasClass(op.closeClass)) {
							$(this).click(function (event) {
								jTabs.eq(iTabIndex).remove();
								jGroups.eq(iTabIndex).remove();
								if (iTabIndex == op.currentIndex) {
									op.currentIndex = (iTabIndex + 1 < jTabs.size()) ? iTabIndex : iTabIndex - 1;
								} else if (iTabIndex < op.currentIndex) {
									op.currentIndex = iTabIndex;
								}
								initTab(jT);
								return false;
							});
						}
					});
				});
				switchTab(jT, op.currentIndex);
			}

			function switchTab(jT, iTabIndex) {
				var jSelector = jT.add($("> *", jT));
				var jTabHeader = $(op.stTabHeader, jSelector);
				var jTabs = $(op.stTab + " li", jTabHeader);
				var jGroups = $(op.stTabPanel + " > *", jSelector);
				var jTab = jTabs.eq(iTabIndex);
				var jGroup = jGroups.eq(iTabIndex);
				if (op.reverse && (jTab.hasClass("selected"))) {
					jTabs.removeClass("selected");
					jGroups.hide();
				} else {
					op.currentIndex = iTabIndex;
					jTabs.removeClass("selected");
					jTab.addClass("selected");
					jGroups.hide().eq(op.currentIndex).show();
				}
				if (!jGroup.attr("inited")) {
					jGroup.attr("inited", 1000).find("input[type=text]").filter("[alt]").inputAlert();
				}
			}
		}});
})(jQuery);
(function ($) {
	$.fn.extend({jresize: function (options) {
		if (typeof options == 'string') {
			if (options == 'destroy')
				return this.each(function () {
					var dialog = this;
					$("div[class^='resizable']", dialog).each(function () {
						$(this).hide();
					});
				});
		}
		return this.each(function () {
			var dialog = $(this);
			var resizable = $(".resizable");
			$("div[class^='resizable']", dialog).each(function () {
				var bar = this;
				$(bar).mousedown(function (event) {
					$.pdialog.switchDialog(dialog);
					$.resizeTool.start(resizable, dialog, event, $(bar).attr("tar"));
					return false;
				}).show();
			});
		});
	}});
	$.resizeTool = {
		start: function (resizable, dialog, e, target) {
			$.pdialog.initResize(resizable, dialog, target);
			$.data(resizable[0], 'layer-drag', {
				options: $.extend($.pdialog._op, {target: target, dialog: dialog, stop: $.resizeTool.stop})});
			$.layerdrag.start(resizable[0], e, $.pdialog._op);
		},
		stop: function () {
			var data = $.data(arguments[0], 'layer-drag');
			$.pdialog.resizeDialog(arguments[0], data.options.dialog, data.options.target);
			$("body").css("cursor", "");
			$(arguments[0]).hide();
		}};
	$.layerdrag = {
		start: function (obj, e, options) {
			if (!$.layerdrag.current) {
				$.layerdrag.current = {
					el: obj,
					oleft: parseInt(obj.style.left) || 0,
					owidth: parseInt(obj.style.width) || 0,
					otop: parseInt(obj.style.top) || 0,
					oheight: parseInt(obj.style.height) || 0,
					ox: e.pageX || e.screenX,
					oy: e.pageY || e.clientY};
				$(document).bind('mouseup', $.layerdrag.stop);
				$(document).bind('mousemove', $.layerdrag.drag);
			}
			return $.layerdrag.preventEvent(e);
		},
		drag: function (e) {
			if (!e)var e = window.event;
			var current = $.layerdrag.current;
			var data = $.data(current.el, 'layer-drag');
			var lmove = (e.pageX || e.screenX) - current.ox;
			var tmove = (e.pageY || e.clientY) - current.oy;
			if ((e.pageY || e.clientY) <= 0 || (e.pageY || e.clientY) >= ($(window).height() - $(".dialogHeader", $(data.options.dialog)).outerHeight()))return false;
			var target = data.options.target;
			var width = current.owidth;
			var height = current.oheight;
			if (target != "n" && target != "s") {
				width += (target.indexOf("w") >= 0) ? -lmove : lmove;
			}
			if (width >= $.pdialog._op.minW) {
				if (target.indexOf("w") >= 0) {
					current.el.style.left = (current.oleft + lmove) + 'px';
				}
				if (target != "n" && target != "s") {
					current.el.style.width = width + 'px';
				}
			}
			if (target != "w" && target != "e") {
				height += (target.indexOf("n") >= 0) ? -tmove : tmove;
			}
			if (height >= $.pdialog._op.minH) {
				if (target.indexOf("n") >= 0) {
					current.el.style.top = (current.otop + tmove) + 'px';
				}
				if (target != "w" && target != "e") {
					current.el.style.height = height + 'px';
				}
			}
			return $.layerdrag.preventEvent(e);
		},
		stop: function (e) {
			var current = $.layerdrag.current;
			var data = $.data(current.el, 'layer-drag');
			$(document).unbind('mousemove', $.layerdrag.drag);
			$(document).unbind('mouseup', $.layerdrag.stop);
			if (data.options.stop) {
				data.options.stop.apply(current.el, [current.el]);
			}
			$.layerdrag.current = null;
			return $.layerdrag.preventEvent(e);
		},
		preventEvent: function (e) {
			if (e.stopPropagation)e.stopPropagation();
			if (e.preventDefault)e.preventDefault();
			return false;
		}};
})(jQuery);
(function ($) {
	$.pdialog = {
		_op: {height: 300, width: 580, minH: 40, minW: 50, total: 20, max: false, mask: false, resizable: true, drawable: true, maxable: true, minable: true, fresh: true},
		_current: null,
		_zIndex: 42,
		getCurrent: function () {
			return this._current;
		},
		reload: function (url, options) {
			var op = $.extend({data: {}, dialogId: "", callback: null}, options);
			var dialog = (op.dialogId && $("body").data(op.dialogId)) || this._current;
			if (dialog) {
				var jDContent = dialog.find(".dialogContent");
				jDContent.ajaxUrl({
					type: "POST", url: url, data: op.data, callback: function (response) {
						jDContent.find("[layoutH]").layoutH(jDContent);
						$(".pageContent", dialog).width($(dialog).width() - 14);
						$(":button.close", dialog).click(function () {
							$.pdialog.close(dialog);
							return false;
						});
						if ($.isFunction(op.callback))op.callback(response);
					}});
			}
		},
		open: function (url, dlgid, title, options) {
			var op = $.extend({}, $.pdialog._op, options);
			var dialog = $("body").data(dlgid);
			if (dialog) {
				if (dialog.is(":hidden")) {
					dialog.show();
				}
				if (op.fresh || url != $(dialog).data("url")) {
					dialog.data("url", url);
					dialog.find(".dialogHeader").find("h1").html(title);
					this.switchDialog(dialog);
					var jDContent = dialog.find(".dialogContent");
					jDContent.loadUrl(url, {}, function () {
						jDContent.find("[layoutH]").layoutH(jDContent);
						$(".pageContent", dialog).width($(dialog).width() - 14);
						$("button.close").click(function () {
							$.pdialog.close(dialog);
							return false;
						});
					});
				}
			} else {
				$("body").append(DWZ.frag["dialogFrag"]);
				dialog = $(">.dialog:last-child", "body");
				dialog.data("id", dlgid);
				dialog.data("url", url);
				if (options.close)dialog.data("close", options.close);
				if (options.param)dialog.data("param", options.param);
				($.fn.bgiframe && dialog.bgiframe());
				dialog.find(".dialogHeader").find("h1").html(title);
				$(dialog).css("zIndex", ($.pdialog._zIndex += 2));
				$("div.shadow").css("zIndex", $.pdialog._zIndex - 3).show();
				$.pdialog._init(dialog, options);
				$(dialog).click(function () {
					$.pdialog.switchDialog(dialog);
				});
				if (op.resizable)
					dialog.jresize();
				if (op.drawable)
					dialog.dialogDrag();
				$("a.close", dialog).click(function (event) {
					$.pdialog.close(dialog);
					return false;
				});
				if (op.maxable) {
					$("a.maximize", dialog).show().click(function (event) {
						$.pdialog.switchDialog(dialog);
						$.pdialog.maxsize(dialog);
						dialog.jresize("destroy").dialogDrag("destroy");
						return false;
					});
				} else {
					$("a.maximize", dialog).hide();
				}
				$("a.restore", dialog).click(function (event) {
					$.pdialog.restore(dialog);
					dialog.jresize().dialogDrag();
					return false;
				});
				if (op.minable) {
					$("a.minimize", dialog).show().click(function (event) {
						$.pdialog.minimize(dialog);
						return false;
					});
				} else {
					$("a.minimize", dialog).hide();
				}
				$("div.dialogHeader a", dialog).mousedown(function () {
					return false;
				});
				$("div.dialogHeader", dialog).dblclick(function () {
					if ($("a.restore", dialog).is(":hidden"))
						$("a.maximize", dialog).trigger("click");
					else
						$("a.restore", dialog).trigger("click");
				});
				if (op.max) {
					$.pdialog.maxsize(dialog);
					dialog.jresize("destroy").dialogDrag("destroy");
				}
				$("body").data(dlgid, dialog);
				$.pdialog._current = dialog;
				$.pdialog.attachShadow(dialog);
				var jDContent = $(".dialogContent", dialog);
				jDContent.loadUrl(url, {}, function () {
					jDContent.find("[layoutH]").layoutH(jDContent);
					$(".pageContent", dialog).width($(dialog).width() - 14);
					$("button.close").click(function () {
						$.pdialog.close(dialog);
						return false;
					});
				});
			}
			if (op.mask) {
				$(dialog).css("zIndex", 1000);
				$("a.minimize", dialog).hide();
				$(dialog).data("mask", true);
				$("#dialogBackground").show();
			} else {
				if (op.minable)$.taskBar.addDialog(dlgid, title);
			}
		},
		switchDialog: function (dialog) {
			var index = $(dialog).css("zIndex");
			$.pdialog.attachShadow(dialog);
			if ($.pdialog._current) {
				var cindex = $($.pdialog._current).css("zIndex");
				$($.pdialog._current).css("zIndex", index);
				$(dialog).css("zIndex", cindex);
				$("div.shadow").css("zIndex", cindex - 1);
				$.pdialog._current = dialog;
			}
			$.taskBar.switchTask(dialog.data("id"));
		},
		attachShadow: function (dialog) {
			var shadow = $("div.shadow");
			if (shadow.is(":hidden"))shadow.show();
			shadow.css({
				top: parseInt($(dialog)[0].style.top) - 2,
				left: parseInt($(dialog)[0].style.left) - 4,
				height: parseInt($(dialog).height()) + 8,
				width: parseInt($(dialog).width()) + 8,
				zIndex: parseInt($(dialog).css("zIndex")) - 1});
			$(".shadow_c", shadow).children().andSelf().each(function () {
				$(this).css("height", $(dialog).outerHeight() - 4);
			});
		},
		_init: function (dialog, options) {
			var op = $.extend({}, this._op, options);
			var height = op.height > op.minH ? op.height : op.minH;
			var width = op.width > op.minW ? op.width : op.minW;
			if (isNaN(dialog.height()) || dialog.height() < height) {
				$(dialog).height(height + "px");
				$(".dialogContent", dialog).height(height - $(".dialogHeader", dialog).outerHeight() - $(".dialogFooter", dialog).outerHeight() - 6);
			}
			if (isNaN(dialog.css("width")) || dialog.width() < width) {
				$(dialog).width(width + "px");
			}
			var iTop = ($(window).height() - dialog.height()) / 2;
			dialog.css({
				left: ($(window).width() - dialog.width()) / 2,
				top: iTop > 0 ? iTop : 0});
		},
		initResize: function (resizable, dialog, target) {
			$("body").css("cursor", target + "-resize");
			resizable.css({
				top: $(dialog).css("top"),
				left: $(dialog).css("left"),
				height: $(dialog).css("height"),
				width: $(dialog).css("width")});
			resizable.show();
		},
		repaint: function (target, options) {
			var shadow = $("div.shadow");
			if (target != "w" && target != "e") {
				shadow.css("height", shadow.outerHeight() + options.tmove);
				$(".shadow_c", shadow).children().andSelf().each(function () {
					$(this).css("height", $(this).outerHeight() + options.tmove);
				});
			}
			if (target == "n" || target == "nw" || target == "ne") {
				shadow.css("top", options.otop - 2);
			}
			if (options.owidth && (target != "n" || target != "s")) {
				shadow.css("width", options.owidth + 8);
			}
			if (target.indexOf("w") >= 0) {
				shadow.css("left", options.oleft - 4);
			}
		},
		resizeTool: function (target, tmove, dialog) {
			$("div[class^='resizable']", dialog).filter(function () {
				return $(this).attr("tar") == 'w' || $(this).attr("tar") == 'e';
			}).each(function () {
					$(this).css("height", $(this).outerHeight() + tmove);
				});
		},
		resizeDialog: function (obj, dialog, target) {
			var oleft = parseInt(obj.style.left);
			var otop = parseInt(obj.style.top);
			var height = parseInt(obj.style.height);
			var width = parseInt(obj.style.width);
			if (target == "n" || target == "nw") {
				tmove = parseInt($(dialog).css("top")) - otop;
			} else {
				tmove = height - parseInt($(dialog).css("height"));
			}
			$(dialog).css({left: oleft, width: width, top: otop, height: height});
			$(".dialogContent", dialog).css("width", (width - 12) + "px");
			$(".pageContent", dialog).css("width", (width - 14) + "px");
			if (target != "w" && target != "e") {
				var content = $(".dialogContent", dialog);
				content.css({height: height - $(".dialogHeader", dialog).outerHeight() - $(".dialogFooter", dialog).outerHeight() - 6});
				content.find("[layoutH]").layoutH(content);
				$.pdialog.resizeTool(target, tmove, dialog);
			}
			$.pdialog.repaint(target, {oleft: oleft, otop: otop, tmove: tmove, owidth: width});
			$(window).trigger(DWZ.eventType.resizeGrid);
		},
		close: function (dialog) {
			if (typeof dialog == 'string')dialog = $("body").data(dialog);
			var close = dialog.data("close");
			var go = true;
			if (close && $.isFunction(close)) {
				var param = dialog.data("param");
				if (param && param != "") {
					param = DWZ.jsonEval(param);
					go = close(param);
				} else {
					go = close();
				}
				if (!go)return;
			}
			$(dialog).hide();
			$("div.shadow").hide();
			if ($(dialog).data("mask")) {
				$("#dialogBackground").hide();
			} else {
				if ($(dialog).data("id"))$.taskBar.closeDialog($(dialog).data("id"));
			}
			$("body").removeData($(dialog).data("id"));
			$(dialog).trigger(DWZ.eventType.pageClear).remove();
		},
		closeCurrent: function () {
			this.close($.pdialog._current);
		},
		checkTimeout: function () {
			var $conetnt = $(".dialogContent", $.pdialog._current);
			var json = DWZ.jsonEval($conetnt.html());
			if (json && json.statusCode == DWZ.statusCode.timeout)this.closeCurrent();
		},
		maxsize: function (dialog) {
			$(dialog).data("original", {
				top: $(dialog).css("top"),
				left: $(dialog).css("left"),
				width: $(dialog).css("width"),
				height: $(dialog).css("height")});
			$("a.maximize", dialog).hide();
			$("a.restore", dialog).show();
			var iContentW = $(window).width();
			var iContentH = $(window).height() - 34;
			$(dialog).css({top: "0px", left: "0px", width: iContentW + "px", height: iContentH + "px"});
			$.pdialog._resizeContent(dialog, iContentW, iContentH);
		},
		restore: function (dialog) {
			var original = $(dialog).data("original");
			var dwidth = parseInt(original.width);
			var dheight = parseInt(original.height);
			$(dialog).css({
				top: original.top,
				left: original.left,
				width: dwidth,
				height: dheight});
			$.pdialog._resizeContent(dialog, dwidth, dheight);
			$("a.maximize", dialog).show();
			$("a.restore", dialog).hide();
			$.pdialog.attachShadow(dialog);
		},
		minimize: function (dialog) {
			$(dialog).hide();
			$("div.shadow").hide();
			var task = $.taskBar.getTask($(dialog).data("id"));
			$(".resizable").css({
				top: $(dialog).css("top"),
				left: $(dialog).css("left"),
				height: $(dialog).css("height"),
				width: $(dialog).css("width")}).show().animate({top: $(window).height() - 60, left: task.position().left, width: task.outerWidth(), height: task.outerHeight()}, 250, function () {
					$(this).hide();
					$.taskBar.inactive($(dialog).data("id"));
				});
		},
		_resizeContent: function (dialog, width, height) {
			var content = $(".dialogContent", dialog);
			content.css({width: (width - 12) + "px", height: height - $(".dialogHeader", dialog).outerHeight() - $(".dialogFooter", dialog).outerHeight() - 6});
			content.find("[layoutH]").layoutH(content);
			$(".pageContent", dialog).css("width", (width - 14) + "px");
			$(window).trigger(DWZ.eventType.resizeGrid);
		}};
})(jQuery);
(function ($) {
	$.fn.dialogDrag = function (options) {
		if (typeof options == 'string') {
			if (options == 'destroy')
				return this.each(function () {
					var dialog = this;
					$("div.dialogHeader", dialog).unbind("mousedown");
				});
		}
		return this.each(function () {
			var dialog = $(this);
			$("div.dialogHeader", dialog).mousedown(function (e) {
				$.pdialog.switchDialog(dialog);
				dialog.data("task", true);
				setTimeout(function () {
					if (dialog.data("task"))$.dialogDrag.start(dialog, e);
				}, 100);
				return false;
			}).mouseup(function (e) {
					dialog.data("task", false);
					return false;
				});
		});
	};
	$.dialogDrag = {
		currId: null,
		_init: function (dialog) {
			this.currId = new Date().getTime();
			var shadow = $("#dialogProxy");
			if (!shadow.size()) {
				shadow = $(DWZ.frag["dialogProxy"]);
				$("body").append(shadow);
			}
			$("h1", shadow).html($(".dialogHeader h1", dialog).text());
		},
		start: function (dialog, event) {
			this._init(dialog);
			var sh = $("#dialogProxy");
			sh.css({
				left: dialog.css("left"),
				top: dialog.css("top"),
				height: dialog.css("height"),
				width: dialog.css("width"),
				zIndex: parseInt(dialog.css("zIndex")) + 1}).show();
			$("div.dialogContent", sh).css("height", $("div.dialogContent", dialog).css("height"));
			sh.data("dialog", dialog);
			dialog.css({left: "-10000px", top: "-10000px"});
			$(".shadow").hide();
			$(sh).jDrag({
				selector: ".dialogHeader",
				stop: this.stop,
				event: event});
			return false;
		},
		stop: function () {
			var sh = $(arguments[0]);
			var dialog = sh.data("dialog");
			$(dialog).css({left: $(sh).css("left"), top: $(sh).css("top")});
			$.pdialog.attachShadow(dialog);
			$(sh).hide();
		}}
})(jQuery);
(function ($) {
	var _op = {
		cursor: 'move',
		sortBoxs: 'div.sortDrag',
		replace: true,
		items: '> *',
		selector: '',
		zIndex: 1000};
	var sortDrag = {
		start: function ($sortBox, $item, event, op) {
			var $placeholder = this._createPlaceholder($item);
			var $helper = $item.clone();
			var position = $item.position();
			$helper.data('$sortBox', $sortBox).data('op', op).data('$item', $item).data('$placeholder', $placeholder);
			$helper.addClass('sortDragHelper').css({position: 'absolute', top: position.top, left: position.left, zIndex: op.zIndex, width: $item.width() + 'px', height: $item.height() + 'px'}).jDrag({
				selector: op.selector,
				drag: this.drag,
				stop: this.stop,
				event: event});
			$item.before($placeholder).before($helper).hide();
			return false;
		},
		drag: function () {
			var $helper = $(arguments[0]), $sortBox = $helper.data('$sortBox'), $placeholder = $helper.data('$placeholder');
			var $items = $sortBox.find($helper.data('op')['items']).filter(':visible').filter(':not(.sortDragPlaceholder, .sortDragHelper)');
			var helperPos = $helper.position(), firstPos = $items.eq(0).position();
			var $overBox = sortDrag._getOverSortBox($helper);
			if ($overBox.length > 0 && $overBox[0] != $sortBox[0]) {
				$placeholder.appendTo($overBox);
				$helper.data('$sortBox', $overBox);
			} else {
				for (var i = 0; i < $items.length; i++) {
					var $this = $items.eq(i), position = $this.position();
					if (helperPos.top > position.top + 10) {
						$this.after($placeholder);
					} else if (helperPos.top <= position.top) {
						$this.before($placeholder);
						break;
					}
				}
			}
		},
		stop: function () {
			var $helper = $(arguments[0]), $item = $helper.data('$item'), $placeholder = $helper.data('$placeholder');
			var position = $placeholder.position();
			$helper.animate({
				top: position.top + "px",
				left: position.left + "px"}, {
				complete: function () {
					if ($helper.data('op')['replace']) {
						$srcBox = $item.parents(_op.sortBoxs + ":first");
						$destBox = $placeholder.parents(_op.sortBoxs + ":first");
						if ($srcBox[0] != $destBox[0]) {
							$replaceItem = $placeholder.next();
							if ($replaceItem.size() > 0) {
								$replaceItem.insertAfter($item);
							}
						}
					}
					$item.insertAfter($placeholder).show();
					$placeholder.remove();
					$helper.remove();
				},
				duration: 300});
		},
		_createPlaceholder: function ($item) {
			return $('<' + $item[0].nodeName + ' class="sortDragPlaceholder"/>').css({
				width: $item.outerWidth() + 'px',
				height: $item.outerHeight() + 'px',
				marginTop: $item.css('marginTop'),
				marginRight: $item.css('marginRight'),
				marginBottom: $item.css('marginBottom'),
				marginLeft: $item.css('marginLeft')});
		},
		_getOverSortBox: function ($item) {
			var itemPos = $item.position();
			var y = itemPos.top + ($item.height() / 2), x = itemPos.left + ($item.width() / 2);
			return $(_op.sortBoxs).filter(':visible').filter(function () {
				var $sortBox = $(this), sortBoxPos = $sortBox.position();
				return DWZ.isOver(y, x, sortBoxPos.top, sortBoxPos.left, $sortBox.height(), $sortBox.width());
			});
		}};
	$.fn.sortDrag = function (options) {
		return this.each(function () {
			var op = $.extend({}, _op, options);
			var $sortBox = $(this);
			if ($sortBox.attr('selector'))op.selector = $sortBox.attr('selector');
			$sortBox.find(op.items).each(function (i) {
				var $item = $(this), $selector = $item;
				if (op.selector) {
					$selector = $item.find(op.selector).css({cursor: op.cursor});
				}
				$selector.mousedown(function (event) {
					sortDrag.start($sortBox, $item, event, op);
					event.preventDefault();
				});
			});
		});
	}
})(jQuery);
(function ($) {
	$.fn.extend({
		cssTable: function (options) {
			return this.each(function () {
				var $this = $(this);
				var $trs = $this.find('tbody>tr');
				var $grid = $this.parent();
				var nowrap = $this.hasClass("nowrap");
				$trs.hoverClass("hover").each(function (index) {
					var $tr = $(this);
					if (!nowrap && index % 2 == 1)$tr.addClass("trbg");
					$tr.click(function () {
						$trs.filter(".selected").removeClass("selected");
						$tr.addClass("selected");
						var sTarget = $tr.attr("target");
						if (sTarget) {
							if ($("#" + sTarget, $grid).size() == 0) {
								$grid.prepend('<input id="' + sTarget + '" type="hidden" />');
							}
							$("#" + sTarget, $grid).val($tr.attr("rel"));
						}
					});
				});
				$this.find("thead [orderField]").orderBy({
					targetType: $this.attr("targetType"),
					rel: $this.attr("rel"),
					asc: $this.attr("asc") || "asc",
					desc: $this.attr("desc") || "desc"});
			});
		}});
})(jQuery);
(function ($) {
	$.fn.jTable = function (options) {
		return this.each(function () {
			var $table = $(this), nowrapTD = $table.attr("nowrapTD");
			var tlength = $table.width();
			var aStyles = [];
			var $tc = $table.parent().addClass("j-resizeGrid");
			var layoutH = $(this).attr("layoutH");
			var oldThs = $table.find("thead>tr:last-child").find("th");
			for (var i = 0, l = oldThs.size(); i < l; i++) {
				var $th = $(oldThs[i]);
				var style = [], width = $th.innerWidth() - (100 * $th.innerWidth() / tlength) - 2;
				style[0] = parseInt(width);
				style[1] = $th.attr("align");
				aStyles[aStyles.length] = style;
			}
			$(this).wrap("<div class='grid'></div>");
			var $grid = $table.parent().html($table.html());
			var thead = $grid.find("thead");
			thead.wrap("<div class='gridHeader'><div class='gridThead'><table style='width:" + (tlength - 20) + "px;'></table></div></div>");
			var lastH = $(">tr:last-child", thead);
			var ths = $(">th", lastH);
			$("th", thead).each(function () {
				var $th = $(this);
				$th.html("<div class='gridCol' title='" + $th.text() + "'>" + $th.html() + "</div>");
			});
			ths.each(function (i) {
				var $th = $(this), style = aStyles[i];
				$th.addClass(style[1]).hoverClass("hover").removeAttr("align").removeAttr("width").width(style[0]);
			}).filter("[orderField]").orderBy({
					targetType: $table.attr("targetType"),
					rel: $table.attr("rel"),
					asc: $table.attr("asc") || "asc",
					desc: $table.attr("desc") || "desc"});
			var tbody = $grid.find(">tbody");
			var layoutStr = layoutH ? " layoutH='" + layoutH + "'" : "";
			tbody.wrap("<div class='gridScroller'" + layoutStr + " style='width:" + $tc.width() + "px;'><div class='gridTbody'><table style='width:" + (tlength - 20) + "px;'></table></div></div>");
			var ftr = $(">tr:first-child", tbody);
			var $trs = tbody.find('>tr');
			$trs.hoverClass().each(function () {
				var $tr = $(this);
				var $ftds = $(">td", this);
				for (var i = 0; i < $ftds.size(); i++) {
					var $ftd = $($ftds[i]);
					if (nowrapTD != "false")$ftd.html("<div>" + $ftd.html() + "</div>");
					if (i < aStyles.length)$ftd.addClass(aStyles[i][1]);
				}
				$tr.click(function () {
					$trs.filter(".selected").removeClass("selected");
					$tr.addClass("selected");
					var sTarget = $tr.attr("target");
					if (sTarget) {
						if ($("#" + sTarget, $grid).size() == 0) {
							$grid.prepend('<input id="' + sTarget + '" type="hidden" />');
						}
						$("#" + sTarget, $grid).val($tr.attr("rel"));
					}
				});
			});
			$(">td", ftr).each(function (i) {
				if (i < aStyles.length)$(this).width(aStyles[i][0]);
			});
			$grid.append("<div class='resizeMarker' style='height:300px; left:57px;display:none;'></div><div class='resizeProxy' style='height:300px; left:377px;display:none;'></div>");
			var scroller = $(".gridScroller", $grid);
			scroller.scroll(function (event) {
				var header = $(".gridThead", $grid);
				if (scroller.scrollLeft() > 0) {
					header.css("position", "relative");
					var scroll = scroller.scrollLeft();
					header.css("left", scroller.cssv("left") - scroll);
				}
				if (scroller.scrollLeft() == 0) {
					header.css("position", "relative");
					header.css("left", "0px");
				}
				return false;
			});
			$(">tr", thead).each(function () {
				$(">th", this).each(function (i) {
					var th = this, $th = $(this);
					$th.mouseover(function (event) {
						var offset = $.jTableTool.getOffset(th, event).offsetX;
						if ($th.outerWidth() - offset < 5) {
							$th.css("cursor", "col-resize").mousedown(function (event) {
								$(".resizeProxy", $grid).show().css({
									left: $.jTableTool.getRight(th) - $(".gridScroller", $grid).scrollLeft(),
									top: $.jTableTool.getTop(th),
									height: $.jTableTool.getHeight(th, $grid),
									cursor: "col-resize"});
								$(".resizeMarker", $grid).show().css({
									left: $.jTableTool.getLeft(th) + 1 - $(".gridScroller", $grid).scrollLeft(),
									top: $.jTableTool.getTop(th),
									height: $.jTableTool.getHeight(th, $grid)});
								$(".resizeProxy", $grid).jDrag($.extend(options, {scop: true, cellMinW: 20, relObj: $(".resizeMarker", $grid)[0],
									move: "horizontal",
									event: event,
									stop: function () {
										var pleft = $(".resizeProxy", $grid).position().left;
										var mleft = $(".resizeMarker", $grid).position().left;
										var move = pleft - mleft - $th.outerWidth() - 9;
										var cols = $.jTableTool.getColspan($th);
										var cellNum = $.jTableTool.getCellNum($th);
										var oldW = $th.width(), newW = $th.width() + move;
										var $dcell = $(">td", ftr).eq(cellNum - 1);
										$th.width(newW + "px");
										$dcell.width(newW + "px");
										var $table1 = $(thead).parent();
										$table1.width(($table1.width() - oldW + newW) + "px");
										var $table2 = $(tbody).parent();
										$table2.width(($table2.width() - oldW + newW) + "px");
										$(".resizeMarker,.resizeProxy", $grid).hide();
									}}));
							});
						} else {
							$th.css("cursor", $th.attr("orderField") ? "pointer" : "default");
							$th.unbind("mousedown");
						}
						return false;
					});
				});
			});
			function _resizeGrid() {
				$("div.j-resizeGrid").each(function () {
					var width = $(this).innerWidth();
					if (width) {
						$("div.gridScroller", this).width(width + "px");
					}
				});
			}

			$(window).unbind(DWZ.eventType.resizeGrid).bind("resizeGrid", _resizeGrid);
		});
	};
	$.jTableTool = {
		getLeft: function (obj) {
			var width = 0;
			$(obj).prevAll().each(function () {
				width += $(this).outerWidth();
			});
			return width - 1;
		},
		getRight: function (obj) {
			var width = 0;
			$(obj).prevAll().andSelf().each(function () {
				width += $(this).outerWidth();
			});
			return width - 1;
		},
		getTop: function (obj) {
			var height = 0;
			$(obj).parent().prevAll().each(function () {
				height += $(this).outerHeight();
			});
			return height;
		},
		getHeight: function (obj, parent) {
			var height = 0;
			var head = $(obj).parent();
			head.nextAll().andSelf().each(function () {
				height += $(this).outerHeight();
			});
			$(".gridTbody", parent).children().each(function () {
				height += $(this).outerHeight();
			});
			return height;
		},
		getCellNum: function (obj) {
			return $(obj).prevAll().andSelf().size();
		},
		getColspan: function (obj) {
			return $(obj).attr("colspan") || 1;
		},
		getStart: function (obj) {
			var start = 1;
			$(obj).prevAll().each(function () {
				start += parseInt($(this).attr("colspan") || 1);
			});
			return start;
		},
		getPageCoord: function (element) {
			var coord = {x: 0, y: 0};
			while (element) {
				coord.x += element.offsetLeft;
				coord.y += element.offsetTop;
				element = element.offsetParent;
			}
			return coord;
		},
		getOffset: function (obj, evt) {
			if ($.browser.msie) {
				var objset = $(obj).offset();
				var evtset = {
					offsetX: evt.pageX || evt.screenX,
					offsetY: evt.pageY || evt.screenY};
				var offset = {
					offsetX: evtset.offsetX - objset.left,
					offsetY: evtset.offsetY - objset.top};
				return offset;
			}
			var target = evt.target;
			if (target.offsetLeft == undefined) {
				target = target.parentNode;
			}
			var pageCoord = $.jTableTool.getPageCoord(target);
			var eventCoord = {
				x: window.pageXOffset + evt.clientX,
				y: window.pageYOffset + evt.clientY};
			var offset = {
				offsetX: eventCoord.x - pageCoord.x,
				offsetY: eventCoord.y - pageCoord.y};
			return offset;
		}};
})(jQuery);
(function ($) {
	$.fn.extend({
		jTask: function (options) {
			return this.each(function () {
				var $task = $(this);
				var id = $task.attr("id");
				$task.click(function (e) {
					var dialog = $("body").data(id);
					if ($task.hasClass("selected")) {
						$("a.minimize", dialog).trigger("click");
					} else {
						if (dialog.is(":hidden")) {
							$.taskBar.restoreDialog(dialog);
						} else
							$(dialog).trigger("click");
					}
					$.taskBar.scrollCurrent($(this));
					return false;
				});
				$("div.close", $task).click(function (e) {
					$.pdialog.close(id)
					return false;
				}).hoverClass("closeHover");
				$task.hoverClass("hover");
			});
		}});
	$.taskBar = {
		_taskBar: null,
		_taskBox: null,
		_prevBut: null,
		_nextBut: null,
		_op: {id: "taskbar", taskBox: "div.taskbarContent", prevBut: ".taskbarLeft", prevDis: "taskbarLeftDisabled", nextBut: ".taskbarRight", nextDis: "taskbarRightDisabled", selected: "selected", boxMargin: "taskbarMargin"},
		init: function (options) {
			var $this = this;
			$.extend(this._op, options);
			this._taskBar = $("#" + this._op.id);
			if (this._taskBar.size() == 0) {
				this._taskBar = $(DWZ.frag["taskbar"]).appendTo($("#layout"));
				this._taskBar.find(".taskbarLeft").hoverClass("taskbarLeftHover");
				this._taskBar.find(".taskbarRight").hoverClass("taskbarRightHover");
			}
			this._taskBox = this._taskBar.find(this._op.taskBox);
			this._taskList = this._taskBox.find(">ul");
			this._prevBut = this._taskBar.find(this._op.prevBut);
			this._nextBut = this._taskBar.find(this._op.nextBut);
			this._prevBut.click(function (e) {
				$this.scrollLeft()
			});
			this._nextBut.click(function (e) {
				$this.scrollRight()
			});
			this._contextmenu(this._taskBox);
		},
		_contextmenu: function (obj) {
			$(obj).contextMenu('dialogCM', {
				bindings: {
					closeCurrent: function (t, m) {
						var obj = t.isTag("li") ? t : $.taskBar._getCurrent();
						$("div.close", obj).trigger("click");
					},
					closeOther: function (t, m) {
						var selector = t.isTag("li") ? ("#" + t.attr("id")) : ".selected";
						var tasks = $.taskBar._taskList.find(">li:not(:" + selector + ")");
						tasks.each(function (i) {
							$("div.close", tasks[i]).trigger("click");
						});
					},
					closeAll: function (t, m) {
						var tasks = $.taskBar._getTasks();
						tasks.each(function (i) {
							$("div.close", tasks[i]).trigger("click");
						});
					}},
				ctrSub: function (t, m) {
					var mCur = m.find("[rel='closeCurrent']");
					var mOther = m.find("[rel='closeOther']");
					if (!$.taskBar._getCurrent()[0]) {
						mCur.addClass("disabled");
						mOther.addClass("disabled");
					} else {
						if ($.taskBar._getTasks().size() == 1)
							mOther.addClass("disabled");
					}
				}});
		},
		_scrollCurrent: function () {
			var iW = this._tasksW(this._getTasks());
			if (iW > this._getTaskBarW()) {
				var $this = this;
				var lTask = $(">li:last-child", this._taskList);
				var left = this._getTaskBarW() - lTask.position().left - lTask.outerWidth(true);
				this._taskList.animate({
					left: left + 'px'}, 200, function () {
					$this._ctrlScrollBut();
				});
			} else {
				this._ctrlScrollBut();
			}
		},
		_getTaskBarW: function () {
			return this._taskBox.width() - (this._prevBut.is(":hidden") ? this._prevBut.width() + 2 : 0) - (this._nextBut.is(":hidden") ? this._nextBut.width() + 2 : 0);
		},
		_scrollTask: function (task) {
			var $this = this;
			if (task.position().left + this._getLeft() + task.outerWidth() > this._getBarWidth()) {
				var left = this._getTaskBarW() - task.position().left - task.outerWidth(true) - 2;
				this._taskList.animate({left: left + 'px'}, 200, function () {
					$this._ctrlScrollBut();
				});
			} else if (task.position().left + this._getLeft() < 0) {
				var left = this._getLeft() - (task.position().left + this._getLeft());
				this._taskList.animate({left: left + 'px'}, 200, function () {
					$this._ctrlScrollBut();
				});
			}
		},
		_ctrlScrollBut: function () {
			var iW = this._tasksW(this._getTasks());
			if (this._getTaskBarW() > iW) {
				this._taskBox.removeClass(this._op.boxMargin);
				this._nextBut.hide();
				this._prevBut.hide();
				if (this._getTasks().eq(0)[0])this._scrollTask(this._getTasks().eq(0));
			} else {
				this._taskBox.addClass(this._op.boxMargin);
				this._nextBut.show().removeClass(this._op.nextDis);
				this._prevBut.show().removeClass(this._op.prevDis);
				if (this._getLeft() >= 0) {
					this._prevBut.addClass(this._op.prevDis);
				}
				if (this._getLeft() <= this._getTaskBarW() - iW) {
					this._nextBut.addClass(this._op.nextDis);
				}
			}
		},
		_getLeft: function () {
			return this._taskList.position().left;
		},
		_visibleStart: function () {
			var iLeft = this._getLeft();
			var jTasks = this._getTasks();
			for (var i = 0; i < jTasks.size(); i++) {
				if (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft >= 0)return jTasks.eq(i);
			}
			return jTasks.eq(0);
		},
		_visibleEnd: function () {
			var iLeft = this._getLeft();
			var jTasks = this._getTasks();
			for (var i = 0; i < jTasks.size(); i++) {
				if (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft > this._getBarWidth())return jTasks.eq(i);
			}
			return jTasks.eq(jTasks.size() - 1);
		},
		_getTasks: function () {
			return this._taskList.find(">li");
		},
		_tasksW: function (jTasks) {
			var iW = 0;
			jTasks.each(function () {
				iW += $(this).outerWidth(true);
			});
			return iW;
		},
		_getBarWidth: function () {
			return this._taskBar.innerWidth(true);
		},
		addDialog: function (id, title) {
			this.show();
			var task = $("#" + id, this._taskList);
			if (!task[0]) {
				var taskFrag = '<li id="#taskid#"><div class="taskbutton"><span>#title#</span></div><div class="close">Close</div></li>';
				this._taskList.append(taskFrag.replace("#taskid#", id).replace("#title#", title));
				task = $("#" + id, this._taskList);
				task.jTask();
			} else {
				$(">div>span", task).text(title);
			}
			this._contextmenu(task);
			this.switchTask(id);
			this._scrollTask(task);
		},
		closeDialog: function (obj) {
			var task = (typeof obj == 'string') ? $("#" + obj, this._taskList) : obj;
			task.remove();
			if (this._getTasks().size() == 0) {
				this.hide();
			}
			this._scrollCurrent();
		},
		restoreDialog: function (obj) {
			var dialog = (typeof obj == 'string') ? $("body").data(obj) : obj;
			var id = (typeof obj == 'string') ? obj : dialog.data("id");
			var task = $.taskBar.getTask(id);
			$(".resizable").css({top: $(window).height() - 60, left: $(task).position().left, height: $(task).outerHeight(), width: $(task).outerWidth()}).show().animate({top: $(dialog).css("top"), left: $(dialog).css("left"), width: $(dialog).css("width"), height: $(dialog).css("height")}, 250, function () {
				$(this).hide();
				$(dialog).show();
				$.pdialog.attachShadow(dialog);
			});
			$.taskBar.switchTask(id);
		},
		inactive: function (id) {
			$("#" + id, this._taskList).removeClass("selected");
		},
		scrollLeft: function () {
			var task = this._visibleStart();
			this._scrollTask(task);
		},
		scrollRight: function () {
			var task = this._visibleEnd();
			this._scrollTask(task);
		},
		scrollCurrent: function (task) {
			this._scrollTask(task);
		},
		switchTask: function (id) {
			this._getCurrent().removeClass("selected");
			this.getTask(id).addClass("selected");
		},
		_getCurrent: function () {
			return this._taskList.find(">.selected");
		},
		getTask: function (id) {
			return $("#" + id, this._taskList);
		},
		show: function () {
			if (this._taskBar.is(":hidden")) {
				this._taskBar.css("top", $(window).height() - 34 + this._taskBar.outerHeight()).show();
				this._taskBar.animate({
					top: $(window).height() - this._taskBar.outerHeight()}, 500);
			}
		},
		hide: function () {
			this._taskBar.animate({
				top: $(window).height() - 29 + this._taskBar.outerHeight(true)}, 500, function () {
				$.taskBar._taskBar.hide();
			});
		}}
})(jQuery);
function validateCallback(form, callback, confirmMsg) {
	var $form = $(form);
	if (!$form.valid()) {
		return false;
	}
	var _submitFn = function () {
		$.ajax({
			type: form.method || 'POST',
			url: $form.attr("action"),
			data: $form.serializeArray(),
			dataType: "json",
			cache: false,
			success: callback || DWZ.ajaxDone,
			error: DWZ.ajaxError});
	}
	if (confirmMsg) {
		alertMsg.confirm(confirmMsg, {okCall: _submitFn});
	} else {
		_submitFn();
	}
	return false;
}
function iframeCallback(form, callback) {
	var $form = $(form), $iframe = $("#callbackframe");
	if (!$form.valid()) {
		return false;
	}
	if ($iframe.size() == 0) {
		$iframe = $("<iframe id='callbackframe' name='callbackframe' src='about:blank' style='display:none'></iframe>").appendTo("body");
	}
	if (!form.ajax) {
		$form.append('<input type="hidden" name="ajax" value="1" />');
	}
	form.target = "callbackframe";
	_iframeResponse($iframe[0], callback || DWZ.ajaxDone);
}
function _iframeResponse(iframe, callback) {
	var $iframe = $(iframe), $document = $(document);
	$document.trigger("ajaxStart");
	$iframe.bind("load", function (event) {
		$iframe.unbind("load");
		$document.trigger("ajaxStop");
		if (iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
			iframe.src == "javascript:'<html></html>';") {
			return;
		}
		var doc = iframe.contentDocument || iframe.document;
		if (doc.readyState && doc.readyState != 'complete')return;
		if (doc.body && doc.body.innerHTML == "false")return;
		var response;
		if (doc.XMLDocument) {
			response = doc.XMLDocument;
		} else if (doc.body) {
			try {
				response = $iframe.contents().find("body").text();
				response = jQuery.parseJSON(response);
			} catch (e) {
				response = doc.body.innerHTML;
			}
		} else {
			response = doc;
		}
		callback(response);
	});
}
function navTabAjaxDone(json) {
	DWZ.ajaxDone(json);
	if (json.statusCode == DWZ.statusCode.ok) {
		if (json.navTabId) {
			navTab.reloadFlag(json.navTabId);
		} else {
			var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
			var args = $pagerForm.size() > 0 ? $pagerForm.serializeArray() : {}
			navTabPageBreak(args, json.rel);
		}
		if ("closeCurrent" == json.callbackType) {
			setTimeout(function () {
				navTab.closeCurrentTab(json.navTabId);
			}, 100);
		} else if ("forward" == json.callbackType) {
			navTab.reload(json.forwardUrl);
		} else if ("forwardConfirm" == json.callbackType) {
			alertMsg.confirm(json.confirmMsg || DWZ.msg("forwardConfirmMsg"), {
				okCall: function () {
					navTab.reload(json.forwardUrl);
				}});
		} else {
			navTab.getCurrentPanel().find(":input[initValue]").each(function () {
				var initVal = $(this).attr("initValue");
				$(this).val(initVal);
			});
		}
	}
}
function dialogAjaxDone(json) {
	DWZ.ajaxDone(json);
	if (json.statusCode == DWZ.statusCode.ok) {
		if (json.navTabId) {
			navTab.reload(json.forwardUrl, {navTabId: json.navTabId});
		} else if (json.rel) {
			var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
			var args = $pagerForm.size() > 0 ? $pagerForm.serializeArray() : {}
			navTabPageBreak(args, json.rel);
		}
		if ("closeCurrent" == json.callbackType) {
			$.pdialog.closeCurrent();
		}
	}
}
function navTabSearch(form, navTabId) {
	var $form = $(form);
	if (form[DWZ.pageInfo.pageNum])form[DWZ.pageInfo.pageNum].value = 1;
	navTab.reload($form.attr('action'), {data: $form.serializeArray(), navTabId: navTabId});
	return false;
}
function dialogSearch(form) {
	var $form = $(form);
	if (form[DWZ.pageInfo.pageNum])form[DWZ.pageInfo.pageNum].value = 1;
	$.pdialog.reload($form.attr('action'), {data: $form.serializeArray()});
	return false;
}
function dwzSearch(form, targetType) {
	if (targetType == "dialog")dialogSearch(form);
	else navTabSearch(form);
	return false;
}
function divSearch(form, rel) {
	var $form = $(form);
	if (form[DWZ.pageInfo.pageNum])form[DWZ.pageInfo.pageNum].value = 1;
	if (rel) {
		var $box = $("#" + rel);
		$box.ajaxUrl({
			type: "POST", url: $form.attr("action"), data: $form.serializeArray(), callback: function () {
				$box.find("[layoutH]").layoutH();
			}});
	}
	return false;
}
function _getPagerForm($parent, args) {
	var form = $("#pagerForm", $parent).get(0);
	if (form) {
		if (args["pageNum"])form[DWZ.pageInfo.pageNum].value = args["pageNum"];
		if (args["numPerPage"])form[DWZ.pageInfo.numPerPage].value = args["numPerPage"];
		if (args["orderField"])form[DWZ.pageInfo.orderField].value = args["orderField"];
		if (args["orderDirection"] && form[DWZ.pageInfo.orderDirection])form[DWZ.pageInfo.orderDirection].value = args["orderDirection"];
	}
	return form;
}
function dwzPageBreak(options) {
	var op = $.extend({targetType: "navTab", rel: "", data: {pageNum: "", numPerPage: "", orderField: "", orderDirection: ""}, callback: null}, options);
	var $parent = op.targetType == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
	if (op.rel) {
		var $box = $parent.find("#" + op.rel);
		var form = _getPagerForm($box, op.data);
		if (form) {
			$box.ajaxUrl({
				type: "POST", url: $(form).attr("action"), data: $(form).serializeArray(), callback: function () {
					$box.find("[layoutH]").layoutH();
				}});
		}
	} else {
		var form = _getPagerForm($parent, op.data);
		var params = $(form).serializeArray();
		if (op.targetType == "dialog") {
			if (form)$.pdialog.reload($(form).attr("action"), {data: params, callback: op.callback});
		} else {
			if (form)navTab.reload($(form).attr("action"), {data: params, callback: op.callback});
		}
	}
}
function navTabPageBreak(args, rel) {
	dwzPageBreak({targetType: "navTab", rel: rel, data: args});
}
function dialogPageBreak(args, rel) {
	dwzPageBreak({targetType: "dialog", rel: rel, data: args});
}
function ajaxTodo(url, callback) {
	var $callback = callback || navTabAjaxDone;
	if (!$.isFunction($callback))$callback = eval('(' + callback + ')');
	$.ajax({
		type: 'POST',
		url: url,
		dataType: "json",
		cache: false,
		success: $callback,
		error: DWZ.ajaxError});
}
function uploadifyQueueComplete(queueData) {
	var msg = "The total number of files uploaded: " + queueData.uploadsSuccessful + "<br/>" + "The total number of errors while uploading: " + queueData.uploadsErrored + "<br/>" + "The total number of bytes uploaded: " + queueData.queueBytesUploaded + "<br/>" + "The average speed of all uploaded files: " + queueData.averageSpeed;
	if (queueData.uploadsErrored) {
		alertMsg.error(msg);
	} else {
		alertMsg.correct(msg);
	}
}
function uploadifySuccess(file, data, response) {
	alert(data)
}
function uploadifyError(file, errorCode, errorMsg) {
	alertMsg.error(errorCode + ": " + errorMsg);
}
function uploadifyError(event, queueId, fileObj, errorObj) {
	alert("event:" + event + "\nqueueId:" + queueId + "\nfileObj.name:" + fileObj.name + "\nerrorObj.type:" + errorObj.type + "\nerrorObj.info:" + errorObj.info);
}
$.fn.extend({
	ajaxTodo: function () {
		return this.each(function () {
			var $this = $(this);
			$this.click(function (event) {
				var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
				DWZ.debug(url);
				if (!url.isFinishedTm()) {
					alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
					return false;
				}
				var title = $this.attr("title");
				if (title) {
					alertMsg.confirm(title, {
						okCall: function () {
							ajaxTodo(url, $this.attr("callback"));
						}});
				} else {
					ajaxTodo(url, $this.attr("callback"));
				}
				event.preventDefault();
			});
		});
	},
	dwzExport: function () {
		function _doExport($this) {
			var $p = $this.attr("targetType") == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
			var $form = $("#pagerForm", $p);
			var url = $this.attr("href");
			window.location = url + (url.indexOf('?') == -1 ? "?" : "&") + $form.serialize();
		}

		return this.each(function () {
			var $this = $(this);
			$this.click(function (event) {
				var title = $this.attr("title");
				if (title) {
					alertMsg.confirm(title, {
						okCall: function () {
							_doExport($this);
						}});
				} else {
					_doExport($this);
				}
				event.preventDefault();
			});
		});
	}});
(function ($) {
	$.fn.extend({
		pagination: function (opts) {
			var setting = {
				first$: "li.j-first", prev$: "li.j-prev", next$: "li.j-next", last$: "li.j-last", nums$: "li.j-num>a", jumpto$: "li.jumpto",
				pageNumFrag: '<li class="#liClass#"><a href="javascript:;">#pageNum#</a></li>'};
			return this.each(function () {
				var $this = $(this);
				var pc = new Pagination(opts);
				var interval = pc.getInterval();
				var pageNumFrag = '';
				for (var i = interval.start; i < interval.end; i++) {
					pageNumFrag += setting.pageNumFrag.replaceAll("#pageNum#", i).replaceAll("#liClass#", i == pc.getCurrentPage() ? 'selected j-num' : 'j-num');
				}
				$this.html(DWZ.frag["pagination"].replaceAll("#pageNumFrag#", pageNumFrag).replaceAll("#currentPage#", pc.getCurrentPage())).find("li").hoverClass();
				var $first = $this.find(setting.first$);
				var $prev = $this.find(setting.prev$);
				var $next = $this.find(setting.next$);
				var $last = $this.find(setting.last$);
				if (pc.hasPrev()) {
					$first.add($prev).find(">span").hide();
					_bindEvent($prev, pc.getCurrentPage() - 1, pc.targetType(), pc.rel());
					_bindEvent($first, 1, pc.targetType(), pc.rel());
				} else {
					$first.add($prev).addClass("disabled").find(">a").hide();
				}
				if (pc.hasNext()) {
					$next.add($last).find(">span").hide();
					_bindEvent($next, pc.getCurrentPage() + 1, pc.targetType(), pc.rel());
					_bindEvent($last, pc.numPages(), pc.targetType(), pc.rel());
				} else {
					$next.add($last).addClass("disabled").find(">a").hide();
				}
				$this.find(setting.nums$).each(function (i) {
					_bindEvent($(this), i + interval.start, pc.targetType(), pc.rel());
				});
				$this.find(setting.jumpto$).each(function () {
					var $this = $(this);
					var $inputBox = $this.find(":text");
					var $button = $this.find(":button");
					$button.click(function (event) {
						var pageNum = $inputBox.val();
						if (pageNum && pageNum.isPositiveInteger()) {
							dwzPageBreak({targetType: pc.targetType(), rel: pc.rel(), data: {pageNum: pageNum}});
						}
					});
					$inputBox.keyup(function (event) {
						if (event.keyCode == DWZ.keyCode.ENTER)$button.click();
					});
				});
			});
			function _bindEvent($target, pageNum, targetType, rel) {
				$target.bind("click", {pageNum: pageNum}, function (event) {
					dwzPageBreak({targetType: targetType, rel: rel, data: {pageNum: event.data.pageNum}});
					event.preventDefault();
				});
			}
		},
		orderBy: function (options) {
			var op = $.extend({targetType: "navTab", rel: "", asc: "asc", desc: "desc"}, options);
			return this.each(function () {
				var $this = $(this).css({cursor: "pointer"}).click(function () {
					var orderField = $this.attr("orderField");
					var orderDirection = $this.hasClass(op.asc) ? op.desc : op.asc;
					dwzPageBreak({targetType: op.targetType, rel: op.rel, data: {orderField: orderField, orderDirection: orderDirection}});
				});
			});
		},
		pagerForm: function (options) {
			var op = $.extend({pagerForm$: "#pagerForm", parentBox: document}, options);
			var frag = '<input type="hidden" name="#name#" value="#value#" />';
			return this.each(function () {
				var $searchForm = $(this), $pagerForm = $(op.pagerForm$, op.parentBox);
				var actionUrl = $pagerForm.attr("action").replaceAll("#rel#", $searchForm.attr("action"));
				$pagerForm.attr("action", actionUrl);
				$searchForm.find(":input").each(function () {
					var $input = $(this), name = $input.attr("name");
					if (name && (!$input.is(":checkbox,:radio") || $input.is(":checked"))) {
						if ($pagerForm.find(":input[name='" + name + "']").length == 0) {
							var inputFrag = frag.replaceAll("#name#", name).replaceAll("#value#", $input.val());
							$pagerForm.append(inputFrag);
						}
					}
				});
			});
		}});
	var Pagination = function (opts) {
		this.opts = $.extend({
			targetType: "navTab",
			rel: "",
			totalCount: 0,
			numPerPage: 10,
			pageNumShown: 10,
			currentPage: 1,
			callback: function () {
				return false;
			}}, opts);
	}
	$.extend(Pagination.prototype, {
		targetType: function () {
			return this.opts.targetType
		},
		rel: function () {
			return this.opts.rel
		},
		numPages: function () {
			return Math.ceil(this.opts.totalCount / this.opts.numPerPage);
		},
		getInterval: function () {
			var ne_half = Math.ceil(this.opts.pageNumShown / 2);
			var np = this.numPages();
			var upper_limit = np - this.opts.pageNumShown;
			var start = this.getCurrentPage() > ne_half ? Math.max(Math.min(this.getCurrentPage() - ne_half, upper_limit), 0) : 0;
			var end = this.getCurrentPage() > ne_half ? Math.min(this.getCurrentPage() + ne_half, np) : Math.min(this.opts.pageNumShown, np);
			return{start: start + 1, end: end + 1};
		},
		getCurrentPage: function () {
			var currentPage = parseInt(this.opts.currentPage);
			if (isNaN(currentPage))return 1;
			return currentPage;
		},
		hasPrev: function () {
			return this.getCurrentPage() > 1;
		},
		hasNext: function () {
			return this.getCurrentPage() < this.numPages();
		}});
})(jQuery);
(function ($) {
	var _lookup = {currentGroup: "", suffix: "", $target: null, pk: "id"};
	var _util = {
		_lookupPrefix: function (key) {
			var strDot = _lookup.currentGroup ? "." : "";
			return _lookup.currentGroup + strDot + key + _lookup.suffix;
		},
		lookupPk: function (key) {
			return this._lookupPrefix(key);
		},
		lookupField: function (key) {
			return this.lookupPk(key);
		}};
	$.extend({
		bringBackSuggest: function (args) {
			var $box = _lookup['$target'].parents(".unitBox:first");
			$box.find(":input").each(function () {
				var $input = $(this), inputName = $input.attr("name");
				for (var key in args) {
					var name = (_lookup.pk == key) ? _util.lookupPk(key) : _util.lookupField(key);
					if (name == inputName) {
						$input.val(args[key]);
						break;
					}
				}
			});
		},
		bringBack: function (args) {
			$.bringBackSuggest(args);
			$.pdialog.closeCurrent();
		}});
	$.fn.extend({
		lookup: function () {
			return this.each(function () {
				var $this = $(this), options = {mask: true,
					width: $this.attr('width') || 820, height: $this.attr('height') || 400,
					maxable: eval($this.attr("maxable") || "true"),
					resizable: eval($this.attr("resizable") || "true")};
				$this.click(function (event) {
					_lookup = $.extend(_lookup, {
						currentGroup: $this.attr("lookupGroup") || "",
						suffix: $this.attr("suffix") || "",
						$target: $this,
						pk: $this.attr("lookupPk") || "id"});
					var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
					if (!url.isFinishedTm()) {
						alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
						return false;
					}
					$.pdialog.open(url, "_blank", $this.attr("title") || $this.text(), options);
					return false;
				});
			});
		},
		multLookup: function () {
			return this.each(function () {
				var $this = $(this), args = {};
				$this.click(function (event) {
					var $unitBox = $this.parents(".unitBox:first");
					$unitBox.find("[name='" + $this.attr("multLookup") + "']").filter(":checked").each(function () {
						var _args = DWZ.jsonEval($(this).val());
						for (var key in _args) {
							var value = args[key] ? args[key] + "," : "";
							args[key] = value + _args[key];
						}
					});
					if ($.isEmptyObject(args)) {
						alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
						return false;
					}
					$.bringBack(args);
				});
			});
		},
		suggest: function () {
			var op = {suggest$: "#suggest", suggestShadow$: "#suggestShadow"};
			var selectedIndex = -1;
			return this.each(function () {
				var $input = $(this).attr('autocomplete', 'off').keydown(function (event) {
					if (event.keyCode == DWZ.keyCode.ENTER && $(op.suggest$).is(':visible'))return false;
				});
				var suggestFields = $input.attr('suggestFields').split(",");

				function _show(event) {
					var offset = $input.offset();
					var iTop = offset.top + this.offsetHeight;
					var $suggest = $(op.suggest$);
					if ($suggest.size() == 0)$suggest = $('<div id="suggest"></div>').appendTo($('body'));
					$suggest.css({
						left: offset.left + 'px',
						top: iTop + 'px'}).show();
					_lookup = $.extend(_lookup, {
						currentGroup: $input.attr("lookupGroup") || "",
						suffix: $input.attr("suffix") || "",
						$target: $input,
						pk: $input.attr("lookupPk") || "id"});
					var url = unescape($input.attr("suggestUrl")).replaceTmById($(event.target).parents(".unitBox:first"));
					if (!url.isFinishedTm()) {
						alertMsg.error($input.attr("warn") || DWZ.msg("alertSelectMsg"));
						return false;
					}
					var postData = {};
					postData[$input.attr("postField") || "inputValue"] = $input.val();
					$.ajax({
						global: false,
						type: 'POST', dataType: "json", url: url, cache: false,
						data: postData,
						success: function (response) {
							if (!response)return;
							var html = '';
							$.each(response, function (i) {
								var liAttr = '', liLabel = '';
								for (var i = 0; i < suggestFields.length; i++) {
									var str = this[suggestFields[i]];
									if (str) {
										if (liLabel)liLabel += '-';
										liLabel += str;
									}
								}
								for (var key in this) {
									if (liAttr)liAttr += ',';
									liAttr += key + ":'" + this[key] + "'";
								}
								html += '<li lookupAttrs="' + liAttr + '">' + liLabel + '</li>';
							});
							var $lis = $suggest.html('<ul>' + html + '</ul>').find("li");
							$lis.hoverClass("selected").click(function () {
								_select($(this));
							});
							if ($lis.size() == 1 && event.keyCode != DWZ.keyCode.BACKSPACE) {
								_select($lis.eq(0));
							} else if ($lis.size() == 0) {
								var jsonStr = "";
								for (var i = 0; i < suggestFields.length; i++) {
									if (_util.lookupField(suggestFields[i]) == event.target.name) {
										break;
									}
									if (jsonStr)jsonStr += ',';
									jsonStr += suggestFields[i] + ":''";
								}
								jsonStr = "{" + _lookup.pk + ":''," + jsonStr + "}";
								$.bringBackSuggest(DWZ.jsonEval(jsonStr));
							}
						},
						error: function () {
							$suggest.html('');
						}});
					$(document).bind("click", _close);
					return false;
				}

				function _select($item) {
					var jsonStr = "{" + $item.attr('lookupAttrs') + "}";
					$.bringBackSuggest(DWZ.jsonEval(jsonStr));
				}

				function _close() {
					$(op.suggest$).html('').hide();
					selectedIndex = -1;
					$(document).unbind("click", _close);
				}

				$input.focus(_show).click(false).keyup(function (event) {
					var $items = $(op.suggest$).find("li");
					switch (event.keyCode) {
						case DWZ.keyCode.ESC:
						case DWZ.keyCode.TAB:
						case DWZ.keyCode.SHIFT:
						case DWZ.keyCode.HOME:
						case DWZ.keyCode.END:
						case DWZ.keyCode.LEFT:
						case DWZ.keyCode.RIGHT:
							break;
						case DWZ.keyCode.ENTER:
							_close();
							break;
						case DWZ.keyCode.DOWN:
							if (selectedIndex >= $items.size() - 1)selectedIndex = -1;
							else selectedIndex++;
							break;
						case DWZ.keyCode.UP:
							if (selectedIndex < 0)selectedIndex = $items.size() - 1;
							else selectedIndex--;
							break;
						default:
							_show(event);
					}
					$items.removeClass("selected");
					if (selectedIndex >= 0) {
						var $item = $items.eq(selectedIndex).addClass("selected");
						_select($item);
					}
				});
			});
		},
		itemDetail: function () {
			return this.each(function () {
				var $table = $(this).css("clear", "both"), $tbody = $table.find("tbody");
				var fields = [];
				$table.find("tr:first th[type]").each(function (i) {
					var $th = $(this);
					var field = {
						type: $th.attr("type") || "text",
						patternDate: $th.attr("dateFmt") || "yyyy-MM-dd",
						name: $th.attr("name") || "",
						defaultVal: $th.attr("defaultVal") || "",
						size: $th.attr("size") || "12",
						enumUrl: $th.attr("enumUrl") || "",
						lookupGroup: $th.attr("lookupGroup") || "",
						lookupUrl: $th.attr("lookupUrl") || "",
						lookupPk: $th.attr("lookupPk") || "id",
						suggestUrl: $th.attr("suggestUrl"),
						suggestFields: $th.attr("suggestFields"),
						postField: $th.attr("postField") || "",
						fieldClass: $th.attr("fieldClass") || "",
						fieldAttrs: $th.attr("fieldAttrs") || ""};
					fields.push(field);
				});
				$tbody.find("a.btnDel").click(function () {
					var $btnDel = $(this);
					if ($btnDel.is("[href^=javascript:]")) {
						$btnDel.parents("tr:first").remove();
						initSuffix($tbody);
						return false;
					}
					function delDbData() {
						$.ajax({
							type: 'POST', dataType: "json", url: $btnDel.attr('href'), cache: false,
							success: function () {
								$btnDel.parents("tr:first").remove();
								initSuffix($tbody);
							},
							error: DWZ.ajaxError});
					}

					if ($btnDel.attr("title")) {
						alertMsg.confirm($btnDel.attr("title"), {okCall: delDbData});
					} else {
						delDbData();
					}
					return false;
				});
				var addButTxt = $table.attr('addButton') || "Add New";
				if (addButTxt) {
					var $addBut = $('<div class="button"><div class="buttonContent"><button type="button">' + addButTxt + '</button></div></div>').insertBefore($table).find("button");
					var $rowNum = $('<input type="text" name="dwz_rowNum" class="textInput" style="margin:2px;" value="1" size="2"/>').insertBefore($table);
					var trTm = "";
					$addBut.click(function () {
						if (!trTm)trTm = trHtml(fields);
						var rowNum = 1;
						try {
							rowNum = parseInt($rowNum.val())
						} catch (e) {
						}
						for (var i = 0; i < rowNum; i++) {
							var $tr = $(trTm);
							$tr.appendTo($tbody).initUI().find("a.btnDel").click(function () {
								$(this).parents("tr:first").remove();
								initSuffix($tbody);
								return false;
							});
						}
						initSuffix($tbody);
					});
				}
			});
			function initSuffix($tbody) {
				$tbody.find('>tr').each(function (i) {
					$(':input, a.btnLook, a.btnAttach', this).each(function () {
						var $this = $(this), name = $this.attr('name'), val = $this.val();
						if (name)$this.attr('name', name.replaceSuffix(i));
						var lookupGroup = $this.attr('lookupGroup');
						if (lookupGroup) {
							$this.attr('lookupGroup', lookupGroup.replaceSuffix(i));
						}
						var suffix = $this.attr("suffix");
						if (suffix) {
							$this.attr('suffix', suffix.replaceSuffix(i));
						}
						if (val && val.indexOf("#index#") >= 0)$this.val(val.replace('#index#', i + 1));
					});
				});
			}

			function tdHtml(field) {
				var html = '', suffix = '';
				if (field.name.endsWith("[#index#]"))suffix = "[#index#]";
				else if (field.name.endsWith("[]"))suffix = "[]";
				var suffixFrag = suffix ? ' suffix="' + suffix + '" ' : '';
				var attrFrag = '';
				if (field.fieldAttrs) {
					var attrs = DWZ.jsonEval(field.fieldAttrs);
					for (var key in attrs) {
						attrFrag += key + '="' + attrs[key] + '"';
					}
				}
				switch (field.type) {
					case 'del':
						html = '<a href="javascript:void(0)" class="btnDel ' + field.fieldClass + '">删除</a>';
						break;
					case 'lookup':
						var suggestFrag = '';
						if (field.suggestFields) {
							suggestFrag = 'autocomplete="off" lookupGroup="' + field.lookupGroup + '"' + suffixFrag + ' suggestUrl="' + field.suggestUrl + '" suggestFields="' + field.suggestFields + '"' + ' postField="' + field.postField + '"';
						}
						html = '<input type="hidden" name="' + field.lookupGroup + '.' + field.lookupPk + suffix + '"/>' + '<input type="text" name="' + field.name + '"' + suggestFrag + ' lookupPk="' + field.lookupPk + '" size="' + field.size + '" class="' + field.fieldClass + '"/>' + '<a class="btnLook" href="' + field.lookupUrl + '" lookupGroup="' + field.lookupGroup + '" ' + suggestFrag + ' lookupPk="' + field.lookupPk + '" title="查找带回">查找带回</a>';
						break;
					case 'attach':
						html = '<input type="hidden" name="' + field.lookupGroup + '.' + field.lookupPk + suffix + '"/>' + '<input type="text" name="' + field.name + '" size="' + field.size + '" readonly="readonly" class="' + field.fieldClass + '"/>' + '<a class="btnAttach" href="' + field.lookupUrl + '" lookupGroup="' + field.lookupGroup + '" ' + suggestFrag + ' lookupPk="' + field.lookupPk + '" width="560" height="300" title="查找带回">查找带回</a>';
						break;
					case 'enum':
						$.ajax({
							type: "POST", dataType: "html", async: false,
							url: field.enumUrl,
							data: {inputName: field.name},
							success: function (response) {
								html = response;
							}});
						break;
					case 'date':
						html = '<input type="text" name="' + field.name + '" value="' + field.defaultVal + '" class="date ' + field.fieldClass + '" dateFmt="' + field.patternDate + '" size="' + field.size + '"/>' + '<a class="inputDateButton" href="javascript:void(0)">选择</a>';
						break;
					default:
						html = '<input type="text" name="' + field.name + '" value="' + field.defaultVal + '" size="' + field.size + '" class="' + field.fieldClass + '" ' + attrFrag + '/>';
						break;
				}
				return '<td>' + html + '</td>';
			}

			function trHtml(fields) {
				var html = '';
				$(fields).each(function () {
					html += tdHtml(this);
				});
				return '<tr class="unitBox">' + html + '</tr>';
			}
		},
		selectedTodo: function () {
			function _getIds(selectedIds, targetType) {
				var ids = "";
				var $box = targetType == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
				$box.find("input:checked").filter("[name='" + selectedIds + "']").each(function (i) {
					var val = $(this).val();
					ids += i == 0 ? val : "," + val;
				});
				return ids;
			}

			return this.each(function () {
				var $this = $(this);
				var selectedIds = $this.attr("rel") || "ids";
				var postType = $this.attr("postType") || "map";
				$this.click(function () {
					var targetType = $this.attr("targetType");
					var ids = _getIds(selectedIds, targetType);
					if (!ids) {
						alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
						return false;
					}
					var _callback = $this.attr("callback") || (targetType == "dialog" ? dialogAjaxDone : navTabAjaxDone);
					if (!$.isFunction(_callback))_callback = eval('(' + _callback + ')');
					function _doPost() {
						$.ajax({
							type: 'POST', url: $this.attr('href'), dataType: 'json', cache: false,
							data: function () {
								if (postType == 'map') {
									return $.map(ids.split(','), function (val, i) {
										return{name: selectedIds, value: val};
									})
								} else {
									var _data = {};
									_data[selectedIds] = ids;
									return _data;
								}
							}(),
							success: _callback,
							error: DWZ.ajaxError});
					}

					var title = $this.attr("title");
					if (title) {
						alertMsg.confirm(title, {okCall: _doPost});
					} else {
						_doPost();
					}
					return false;
				});
			});
		}});
})(jQuery);
(function ($) {
	$.setRegional("datepicker", {
		dayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
		monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']});
	$.fn.datepicker = function (opts) {
		var setting = {
			box$: "#calendar",
			year$: "#calendar [name=year]", month$: "#calendar [name=month]",
			tmInputs$: "#calendar .time :text", hour$: "#calendar .time .hh", minute$: "#calendar .time .mm", second$: "#calendar .time .ss",
			tmBox$: "#calendar .tm", tmUp$: "#calendar .time .up", tmDown$: "#calendar .time .down",
			close$: "#calendar .close", calIcon$: "a.inputDateButton",
			main$: "#calendar .main", days$: "#calendar .days", dayNames$: "#calendar .dayNames",
			clearBut$: "#calendar .clearBut", okBut$: "#calendar .okBut"};

		function changeTmMenu(sltClass) {
			var $tm = $(setting.tmBox$);
			$tm.removeClass("hh").removeClass("mm").removeClass("ss");
			if (sltClass) {
				$tm.addClass(sltClass);
				$(setting.tmInputs$).removeClass("slt").filter("." + sltClass).addClass("slt");
			}
		}

		function clickTmMenu($input, type) {
			$(setting.tmBox$).find("." + type + " li").each(function () {
				var $li = $(this);
				$li.click(function () {
					$input.val($li.text());
				});
			});
		}

		function keydownInt(e) {
			if (!((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode == DWZ.keyCode.DELETE || e.keyCode == DWZ.keyCode.BACKSPACE))) {
				return false;
			}
		}

		function changeTm($input, type) {
			var ivalue = parseInt($input.val()), istart = parseInt($input.attr("start")) || 0, iend = parseInt($input.attr("end"));
			var istep = parseInt($input.attr('step') || 1);
			if (type == 1) {
				if (ivalue <= iend - istep) {
					$input.val(ivalue + istep);
				}
			} else if (type == -1) {
				if (ivalue >= istart + istep) {
					$input.val(ivalue - istep);
				}
			} else if (ivalue > iend) {
				$input.val(iend);
			} else if (ivalue < istart) {
				$input.val(istart);
			}
		}

		return this.each(function () {
			var $this = $(this);
			var dp = new Datepicker($this.val(), opts);

			function generateCalendar(dp) {
				var dw = dp.getDateWrap();
				var minDate = dp.getMinDate();
				var maxDate = dp.getMaxDate();
				var monthStart = new Date(dw.year, dw.month - 1, 1);
				var startDay = monthStart.getDay();
				var dayStr = "";
				if (startDay > 0) {
					monthStart.setMonth(monthStart.getMonth() - 1);
					var prevDateWrap = dp.getDateWrap(monthStart);
					for (var t = prevDateWrap.days - startDay + 1; t <= prevDateWrap.days; t++) {
						var _date = new Date(dw.year, dw.month - 2, t);
						var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
						dayStr += '<dd class="other ' + _ctrClass + '" chMonth="-1" day="' + t + '">' + t + '</dd>';
					}
				}
				for (var t = 1; t <= dw.days; t++) {
					var _date = new Date(dw.year, dw.month - 1, t);
					var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
					if (t == dw.day) {
						dayStr += '<dd class="slt ' + _ctrClass + '" day="' + t + '">' + t + '</dd>';
					} else {
						dayStr += '<dd class="' + _ctrClass + '" day="' + t + '">' + t + '</dd>';
					}
				}
				for (var t = 1; t <= 42 - startDay - dw.days; t++) {
					var _date = new Date(dw.year, dw.month, t);
					var _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';
					dayStr += '<dd class="other ' + _ctrClass + '" chMonth="1" day="' + t + '">' + t + '</dd>';
				}
				var $days = $(setting.days$).html(dayStr).find("dd");
				$days.not('.disabled').click(function () {
					var $day = $(this);
					if (!dp.hasTime()) {
						$this.val(dp.formatDate(dp.changeDay($day.attr("day"), $day.attr("chMonth"))));
						closeCalendar();
					} else {
						$days.removeClass("slt");
						$day.addClass("slt");
					}
				});
				if (!dp.hasDate())$(setting.main$).addClass('nodate');
				if (dp.hasTime()) {
					$("#calendar .time").show();
					var $hour = $(setting.hour$).val(dw.hour).focus(function () {
						changeTmMenu("hh");
					});
					var iMinute = parseInt(dw.minute / dp.opts.mmStep) * dp.opts.mmStep;
					var $minute = $(setting.minute$).val(iMinute).attr('step', dp.opts.mmStep).focus(function () {
						changeTmMenu("mm");
					});
					var $second = $(setting.second$).val(dp.hasSecond() ? dw.second : 0).attr('step', dp.opts.ssStep).focus(function () {
						changeTmMenu("ss");
					});
					$hour.add($minute).add($second).click(function () {
						return false
					});
					clickTmMenu($hour, "hh");
					clickTmMenu($minute, "mm");
					clickTmMenu($second, "ss");
					$(setting.box$).click(function () {
						changeTmMenu();
					});
					var $inputs = $(setting.tmInputs$);
					$inputs.keydown(keydownInt).each(function () {
						var $input = $(this);
						$input.keyup(function () {
							changeTm($input, 0);
						});
					});
					$(setting.tmUp$).click(function () {
						$inputs.filter(".slt").each(function () {
							changeTm($(this), 1);
						});
					});
					$(setting.tmDown$).click(function () {
						$inputs.filter(".slt").each(function () {
							changeTm($(this), -1);
						});
					});
					if (!dp.hasHour())$hour.attr("disabled", true);
					if (!dp.hasMinute())$minute.attr("disabled", true);
					if (!dp.hasSecond())$second.attr("disabled", true);
				}
			}

			function closeCalendar() {
				$(setting.box$).remove();
				$(document).unbind("click", closeCalendar);
			}

			$this.click(function (event) {
				closeCalendar();
				var dp = new Datepicker($this.val(), opts);
				var offset = $this.offset();
				var iTop = offset.top + this.offsetHeight;
				$(DWZ.frag['calendarFrag']).appendTo("body").css({
					left: offset.left + 'px',
					top: iTop + 'px'}).show().click(function (event) {
						event.stopPropagation();
					});
				($.fn.bgiframe && $(setting.box$).bgiframe());
				var dayNames = "";
				$.each($.regional.datepicker.dayNames, function (i, v) {
					dayNames += "<dt>" + v + "</dt>"
				});
				$(setting.dayNames$).html(dayNames);
				var dw = dp.getDateWrap();
				var $year = $(setting.year$);
				var yearstart = dp.getMinDate().getFullYear();
				var yearend = dp.getMaxDate().getFullYear();
				for (y = yearstart; y <= yearend; y++) {
					$year.append('<option value="' + y + '"' + (dw.year == y ? 'selected="selected"' : '') + '>' + y + '</option>');
				}
				var $month = $(setting.month$);
				$.each($.regional.datepicker.monthNames, function (i, v) {
					var m = i + 1;
					$month.append('<option value="' + m + '"' + (dw.month == m ? 'selected="selected"' : '') + '>' + v + '</option>');
				});
				generateCalendar(dp);
				$year.add($month).change(function () {
					dp.changeDate($year.val(), $month.val());
					generateCalendar(dp);
				});
				var iBoxH = $(setting.box$).outerHeight(true);
				if (iTop > iBoxH && iTop > $(window).height() - iBoxH) {
					$(setting.box$).css("top", offset.top - iBoxH);
				}
				$(setting.close$).click(function () {
					closeCalendar();
				});
				$(setting.clearBut$).click(function () {
					$this.val("");
					closeCalendar();
				});
				$(setting.okBut$).click(function () {
					var $dd = $(setting.days$).find("dd.slt");
					if ($dd.hasClass("disabled"))return false;
					var date = dp.changeDay($dd.attr("day"), $dd.attr("chMonth"));
					if (dp.hasTime()) {
						date.setHours(parseInt($(setting.hour$).val()));
						date.setMinutes(parseInt($(setting.minute$).val()));
						date.setSeconds(parseInt($(setting.second$).val()));
					}
					$this.val(dp.formatDate(date));
					closeCalendar();
				});
				$(document).bind("click", closeCalendar);
				return false;
			});
			$this.parent().find(setting.calIcon$).click(function () {
				$this.trigger("click");
				return false;
			});
		});
	}
	var Datepicker = function (sDate, opts) {
		this.opts = $.extend({
			pattern: 'yyyy-MM-dd',
			minDate: "1900-01-01",
			maxDate: "2099-12-31",
			mmStep: 1,
			ssStep: 1}, opts);
		var now = new Date();
		this.opts.minDate = now.formatDateTm(this.opts.minDate);
		this.opts.maxDate = now.formatDateTm(this.opts.maxDate);
		this.sDate = sDate.trim();
	}
	$.extend(Datepicker.prototype, {
		get: function (name) {
			return this.opts[name];
		},
		_getDays: function (y, m) {
			return m == 2 ? (y % 4 || !(y % 100) && y % 400 ? 28 : 29) : (/4|6|9|11/.test(m) ? 30 : 31);
		},
		_minMaxDate: function (sDate) {
			var _count = sDate.split('-').length - 1;
			var _format = 'y-M-d';
			if (_count == 1)_format = 'y-M';
			else if (_count == 0)_format = 'y';
			return sDate.parseDate(_format);
		},
		getMinDate: function () {
			return this._minMaxDate(this.opts.minDate);
		},
		getMaxDate: function () {
			var _sDate = this.opts.maxDate;
			var _count = _sDate.split('-').length - 1;
			var _date = this._minMaxDate(_sDate);
			if (_count < 2) {
				var _day = this._getDays(_date.getFullYear(), _date.getMonth() + 1);
				_date.setDate(_day);
				if (_count == 0) {
					_date.setMonth(11);
				}
			}
			return _date;
		},
		getDateWrap: function (date) {
			if (!date)date = this.parseDate(this.sDate) || new Date();
			var y = date.getFullYear();
			var m = date.getMonth() + 1;
			var days = this._getDays(y, m);
			return{
				year: y, month: m, day: date.getDate(),
				hour: date.getHours(), minute: date.getMinutes(), second: date.getSeconds(),
				days: days, date: date}
		},
		changeDate: function (y, m, d) {
			var date = new Date(y, m - 1, d || 1);
			this.sDate = this.formatDate(date);
			return date;
		},
		changeDay: function (day, chMonth) {
			if (!chMonth)chMonth = 0;
			var dw = this.getDateWrap();
			return this.changeDate(dw.year, dw.month + parseInt(chMonth), day);
		},
		parseDate: function (sDate) {
			if (!sDate)return null;
			return sDate.parseDate(this.opts.pattern);
		},
		formatDate: function (date) {
			return date.formatDate(this.opts.pattern);
		},
		hasHour: function () {
			return this.opts.pattern.indexOf("H") != -1;
		},
		hasMinute: function () {
			return this.opts.pattern.indexOf("m") != -1;
		},
		hasSecond: function () {
			return this.opts.pattern.indexOf("s") != -1;
		},
		hasTime: function () {
			return this.hasHour() || this.hasMinute() || this.hasSecond();
		},
		hasDate: function () {
			var _dateKeys = ['y', 'M', 'd', 'E'];
			for (var i = 0; i < _dateKeys.length; i++) {
				if (this.opts.pattern.indexOf(_dateKeys[i]) != -1)return true;
			}
			return false;
		}});
})(jQuery);
(function ($) {
	$.extend($.fn, {
		jBlindUp: function (options) {
			var op = $.extend({duration: 500, easing: "swing", call: function () {
			}}, options);
			return this.each(function () {
				var $this = $(this);
				$(this).animate({height: 0}, {
					step: function () {
					},
					duration: op.duration,
					easing: op.easing,
					complete: function () {
						$this.css({display: "none"});
						op.call();
					}});
			});
		},
		jBlindDown: function (options) {
			var op = $.extend({to: 0, duration: 500, easing: "swing", call: function () {
			}}, options);
			return this.each(function () {
				var $this = $(this);
				var fixedPanelHeight = (op.to > 0) ? op.to : $.effect.getDimensions($this[0]).height;
				$this.animate({height: fixedPanelHeight}, {
					step: function () {
					},
					duration: op.duration,
					easing: op.easing,
					complete: function () {
						$this.css({display: ""});
						op.call();
					}});
			});
		},
		jSlideUp: function (options) {
			var op = $.extend({to: 0, duration: 500, easing: "swing", call: function () {
			}}, options);
			return this.each(function () {
				var $this = $(this);
				$this.wrapInner("<div></div>");
				var fixedHeight = (op.to > 0) ? op.to : $.effect.getDimensions($(">div", $this)[0]).height;
				$this.css({overflow: "visible", position: "relative"});
				$(">div", $this).css({position: "relative"}).animate({top: -fixedHeight}, {
					easing: op.easing,
					duration: op.duration,
					complete: function () {
						$this.html($(this).html());
					}});
			});
		},
		jSlideDown: function (options) {
			var op = $.extend({to: 0, duration: 500, easing: "swing", call: function () {
			}}, options);
			return this.each(function () {
				var $this = $(this);
				var fixedHeight = (op.to > 0) ? op.to : $.effect.getDimensions($this[0]).height;
				$this.wrapInner("<div style=\"top:-" + fixedHeight + "px;\"></div>");
				$this.css({overflow: "visible", position: "relative", height: "0px"})
					.animate({height: fixedHeight}, {
						duration: op.duration,
						easing: op.easing,
						complete: function () {
							$this.css({display: "", overflow: ""});
							op.call();
						}});
				$(">div", $this).css({position: "relative"}).animate({top: 0}, {
					easing: op.easing,
					duration: op.duration,
					complete: function () {
						$this.html($(this).html());
					}});
			});
		}});
	$.effect = {
		getDimensions: function (element, displayElement) {
			var dimensions = new $.effect.Rectangle;
			var displayOrig = $(element).css('display');
			var visibilityOrig = $(element).css('visibility');
			var isZero = $(element).height() == 0 ? true : false;
			if ($(element).is(":hidden")) {
				$(element).css({visibility: 'hidden', display: 'block'});
				if (isZero)$(element).css("height", "");
				if ($.browser.opera)
					refElement.focus();
			}
			dimensions.height = $(element).outerHeight();
			dimensions.width = $(element).outerWidth();
			if (displayOrig == 'none') {
				$(element).css({visibility: visibilityOrig, display: 'none'});
				if (isZero)if (isZero)$(element).css("height", "0px");
			}
			return dimensions;
		}}
	$.effect.Rectangle = function () {
		this.width = 0;
		this.height = 0;
		this.unit = "px";
	}
})(jQuery);
(function ($) {
	$.extend($.fn, {
		jPanel: function (options) {
			var op = $.extend({header: "panelHeader", headerC: "panelHeaderContent", content: "panelContent", coll: "collapsable", exp: "expandable", footer: "panelFooter", footerC: "panelFooterContent"}, options);
			return this.each(function () {
				var $panel = $(this);
				var close = $panel.hasClass("close");
				var collapse = $panel.hasClass("collapse");
				var $content = $(">div", $panel).addClass(op.content);
				var title = $(">h1", $panel).wrap('<div class="' + op.header + '"><div class="' + op.headerC + '"></div></div>');
				if (collapse)$("<a href=\"\"></a>").addClass(close ? op.exp : op.coll).insertAfter(title);
				var header = $(">div:first", $panel);
				var footer = $('<div class="' + op.footer + '"><div class="' + op.footerC + '"></div></div>').appendTo($panel);
				var defaultH = $panel.attr("defH") ? $panel.attr("defH") : 0;
				var minH = $panel.attr("minH") ? $panel.attr("minH") : 0;
				if (close)
					$content.css({
						height: "0px",
						display: "none"});
				else {
					if (defaultH > 0)
						$content.height(defaultH + "px");
					else if (minH > 0) {
						$content.css("minHeight", minH + "px");
					}
				}
				if (!collapse)return;
				var $pucker = $("a", header);
				var inH = $content.innerHeight() - 6;
				if (minH > 0 && minH >= inH)defaultH = minH;
				else defaultH = inH;
				$pucker.click(function () {
					if ($pucker.hasClass(op.exp)) {
						$content.jBlindDown({to: defaultH, call: function () {
							$pucker.removeClass(op.exp).addClass(op.coll);
							if (minH > 0)$content.css("minHeight", minH + "px");
						}});
					} else {
						if (minH > 0)$content.css("minHeight", "");
						if (minH >= inH)$content.css("height", minH + "px");
						$content.jBlindUp({call: function () {
							$pucker.removeClass(op.coll).addClass(op.exp);
						}});
					}
					return false;
				});
			});
		}});
})(jQuery);
(function ($) {
	$.fn.extend({
		checkboxCtrl: function (parent) {
			return this.each(function () {
				var $trigger = $(this);
				$trigger.click(function () {
					var group = $trigger.attr("group");
					if ($trigger.is(":checkbox")) {
						var type = $trigger.is(":checked") ? "all" : "none";
						if (group)$.checkbox.select(group, type, parent);
					} else {
						if (group)$.checkbox.select(group, $trigger.attr("selectType") || "all", parent);
					}
				});
			});
		}});
	$.checkbox = {
		selectAll: function (_name, _parent) {
			this.select(_name, "all", _parent);
		},
		unSelectAll: function (_name, _parent) {
			this.select(_name, "none", _parent);
		},
		selectInvert: function (_name, _parent) {
			this.select(_name, "invert", _parent);
		},
		select: function (_name, _type, _parent) {
			$parent = $(_parent || document);
			$checkboxLi = $parent.find(":checkbox[name='" + _name + "']");
			switch (_type) {
				case "invert":
					$checkboxLi.each(function () {
						$checkbox = $(this);
						$checkbox.attr('checked', !$checkbox.is(":checked"));
					});
					break;
				case "none":
					$checkboxLi.attr('checked', false);
					break;
				default:
					$checkboxLi.attr('checked', true);
					break;
			}
		}};
})(jQuery);
(function ($) {
	var allSelectBox = [];
	var killAllBox = function (bid) {
		$.each(allSelectBox, function (i) {
			if (allSelectBox[i] != bid) {
				if (!$("#" + allSelectBox[i])[0]) {
					$("#op_" + allSelectBox[i]).remove();
				} else {
					$("#op_" + allSelectBox[i]).css({height: "", width: ""}).hide();
				}
				$(document).unbind("click", killAllBox);
			}
		});
	};
	$.extend($.fn, {
		comboxSelect: function (options) {
			var op = $.extend({selector: ">a"}, options);
			return this.each(function () {
				var box = $(this);
				var selector = $(op.selector, box);
				allSelectBox.push(box.attr("id"));
				$(op.selector, box).click(function () {
					var options = $("#op_" + box.attr("id"));
					if (options.is(":hidden")) {
						if (options.height() > 300) {
							options.css({height: "300px", overflow: "scroll"});
						}
						var top = box.offset().top + box[0].offsetHeight - 50;
						if (top + options.height() > $(window).height() - 20) {
							top = $(window).height() - 20 - options.height();
						}
						options.css({top: top, left: box.offset().left}).show();
						killAllBox(box.attr("id"));
						$(document).click(killAllBox);
					} else {
						$(document).unbind("click", killAllBox);
						killAllBox();
					}
					return false;
				});
				$("#op_" + box.attr("id")).find(">li").comboxOption(selector, box);
			});
		},
		comboxOption: function (selector, box) {
			return this.each(function () {
				$(">a", this).click(function () {
					var $this = $(this);
					$this.parent().parent().find(".selected").removeClass("selected");
					$this.addClass("selected");
					selector.text($this.text());
					var $input = $("select", box);
					if ($input.val() != $this.attr("value")) {
						$("select", box).val($this.attr("value")).trigger("change");
					}
				});
			});
		},
		combox: function () {
			var _selectBox = [];
			$.each(allSelectBox, function (i) {
				if ($("#" + allSelectBox[i])[0]) {
					_selectBox.push(allSelectBox[i]);
				} else {
					$("#op_" + allSelectBox[i]).remove();
				}
			});
			allSelectBox = _selectBox;
			return this.each(function (i) {
				var $this = $(this).removeClass("combox");
				var name = $this.attr("name");
				var value = $this.val();
				var label = $("option[value=" + value + "]", $this).text();
				var ref = $this.attr("ref");
				var refUrl = $this.attr("refUrl") || "";
				var cid = $this.attr("id") || Math.round(Math.random() * 10000000);
				var select = '<div class="combox"><div id="combox_' + cid + '" class="select"' + (ref ? ' ref="' + ref + '"' : '') + '>';
				select += '<a href="javascript:" class="' + $this.attr("class") + '" name="' + name + '" value="' + value + '">' + label + '</a></div></div>';
				var options = '<ul class="comboxop" id="op_combox_' + cid + '">';
				$("option", $this).each(function () {
					var option = $(this);
					options += "<li><a class=\"" + (value == option[0].value ? "selected" : "") + "\" href=\"#\" value=\"" + option[0].value + "\">" + option[0].text + "</a></li>";
				});
				options += "</ul>";
				$("body").append(options);
				$this.after(select);
				$("div.select", $this.next()).comboxSelect().append($this);
				if (ref && refUrl) {
					function _onchange(event) {
						var $ref = $("#" + ref);
						if ($ref.size() == 0)return false;
						$.ajax({
							type: 'POST', dataType: "json", url: refUrl.replace("{value}", encodeURIComponent($this.attr("value"))), cache: false,
							data: {},
							success: function (json) {
								if (!json)return;
								var html = '';
								$.each(json, function (i) {
									if (json[i] && json[i].length > 1) {
										html += '<option value="' + json[i][0] + '">' + json[i][1] + '</option>';
									}
								});
								var $refCombox = $ref.parents("div.combox:first");
								$ref.html(html).insertAfter($refCombox);
								$refCombox.remove();
								$ref.trigger("change").combox();
							},
							error: DWZ.ajaxError});
					}

					$this.unbind("change", _onchange).bind("change", _onchange);
				}
			});
		}});
})(jQuery);
(function ($) {
	$.extend({
		History: {
			_hash: new Array(),
			_cont: undefined,
			_currentHash: "",
			_callback: undefined,
			init: function (cont, callback) {
				$.History._cont = cont;
				$.History._callback = callback;
				var current_hash = location.hash.replace(/\?.*$/, '');
				$.History._currentHash = current_hash;
				if ($.browser.msie) {
					if ($.History._currentHash == '') {
						$.History._currentHash = '#';
					}
					$("body").append('<iframe id="jQuery_history" style="display: none;" src="about:blank"></iframe>');
					var ihistory = $("#jQuery_history")[0];
					var iframe = ihistory.contentDocument || ihistory.contentWindow.document;
					iframe.open();
					iframe.close();
					iframe.location.hash = current_hash;
				}
				if ($.isFunction(this._callback))
					$.History._callback(current_hash.skipChar("#"));
				setInterval($.History._historyCheck, 100);
			},
			_historyCheck: function () {
				var current_hash = "";
				if ($.browser.msie) {
					var ihistory = $("#jQuery_history")[0];
					var iframe = ihistory.contentWindow;
					current_hash = iframe.location.hash.skipChar("#").replace(/\?.*$/, '');
				} else {
					current_hash = location.hash.skipChar('#').replace(/\?.*$/, '');
				}
				if (current_hash != $.History._currentHash) {
					$.History._currentHash = current_hash;
					$.History.loadHistory(current_hash);
				}
			},
			addHistory: function (hash, fun, args) {
				$.History._currentHash = hash;
				var history = [hash, fun, args];
				$.History._hash.push(history);
				if ($.browser.msie) {
					var ihistory = $("#jQuery_history")[0];
					var iframe = ihistory.contentDocument || ihistory.contentWindow.document;
					iframe.open();
					iframe.close();
					iframe.location.hash = hash.replace(/\?.*$/, '');
					location.hash = hash.replace(/\?.*$/, '');
				} else {
					location.hash = hash.replace(/\?.*$/, '');
				}
			},
			loadHistory: function (hash) {
				if ($.browser.msie) {
					location.hash = hash;
				}
				for (var i = 0; i < $.History._hash.length; i += 1) {
					if ($.History._hash[i][0] == hash) {
						$.History._hash[i][1]($.History._hash[i][2]);
						return;
					}
				}
			}}});
})(jQuery);
(function ($) {
	$.printBox = function (rel) {
		var _printBoxId = 'printBox';
		var $contentBox = rel ? $('#' + rel) : $("body"),
			$printBox = $('#' + _printBoxId);
		if ($printBox.size() == 0) {
			$printBox = $('<div id="' + _printBoxId + '"></div>').appendTo("body");
		}
		$printBox.html($contentBox.html()).find("[layoutH]").height("auto");
		window.print();
	}
})(jQuery);

